为什么我的单线程hello world应用程序使用22个OS线程?

时间:2014-02-14 18:50:59

标签: java jvm

出于好奇,我编写了Hello World并在我的打印声明中设置了一个断点。

public class Program
{
    public static void main(String[] args)
    {
        System.out.println("Hello");
    }
}

当突破点被击中时,我在Windows中启动了任务管理器以查看该JVM进程分配了多少线程。我很震惊地看到22.为什么这个简单程序产生了这么多线程?

3 个答案:

答案 0 :(得分:7)

JVM使用一些守护程序线程(例如垃圾收集器,终结器等)。但是,在这种情况下,附加调试器实际上创建了一些线程来处理调试器连接。

答案 1 :(得分:1)

如上所述,JVM总是运行许多守护进程线程。要查看所有当前正在运行的线程,请在Java VisualVM文件夹中打开JDK-->bin,然后转到“线程”。在那里,您可以看到所有正在运行,正在休眠,等待和监视线程。

目前在我的VisualVM中,我有19个活动主题,其中15是守护程序主题。

答案 2 :(得分:1)

另外,FYI刚刚发现JVM将至少 n 个线程分配给GC,其中 n 是核心数。资料来源:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc。这解释了我的8个。