我有一个简单的java
hello world程序,其sleep
Java代码:
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(100000l);
}
}
使用javac编译
javac Main.java
使用
运行java Main
现在,如果我在jvisualvm
中看到,我会看到这11个主题
为什么RMI线程已启动?
我如何只用基本线程启动jvm?
为什么我要这样做是因为nproc
中的limit.conf
限制约束并且想要同时运行maximun jvm。这些jvm也很短暂。
我正在使用oracle jdk 7
答案 0 :(得分:2)
如果我告诉你这些线程对你没有任何意义,你会相信我吗?
它们都是VisualVM用于与您的程序或JVM本身的一部分进行通信的基础结构的一部分。它们都不能安全地消除,它们也不能消除;他们正在执行VM后台任务,因此您无需担心这些任务。
基本上,不要担心,他们在比hello-world更大的程序中提供的开销毫无意义。
如果您对它们中的几个很好奇,reference manager
只管理当前在内存中的对象,finalizer
是垃圾收集器的一部分。简而言之,你不应该担心的事情。
答案 1 :(得分:1)
请参阅Is there a way to completely disable RMI in a java application?
除非您使用RMI,否则您的JVM将无法启动RMI线程。 '短暂的'但是,JVM可能不是一个能够很好地运行的想法,无论有没有RMI线程的感知开销
答案 2 :(得分:1)
只有在使用VisualVM,JConsole或类似工具连接到JVM时,才会按需启动RMI线程。至于其他线程,another answer如何减少其数量。