使用最少可能的线程初始化Jvm

时间:2015-08-01 17:56:03

标签: java linux multithreading jvm

我有一个简单的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

enter image description here

3 个答案:

答案 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如何减少其数量。