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

Dej*_*jas 5 java jvm

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

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

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

Tim*_*der 7

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

  • @SevenBits Java占用了RAM,但我没有听到很多关于RAM短缺的抱怨.另一方面,它非常小心CPU时间开销 - 这就是所有人的目光所在. (2认同)

Dej*_*jas 1

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