【小实验】启动一个 JVM 至少创建几个线程?

启动一个 JVM 进程至少创建多少个线程呢?让我们来做一个实验吧!测试使用的 JDK 版本为 RedHat Open JDK 1.8.0.275。
示例代码如下:

public static void main(String[] args) {
        Thread.currentThread().getThreadGroup().getParent().list();
}

输出:


从图中可以看到,执行这个简单的 main() 方法共创建了 6 个线程。分别是:
– Reference Handler
– Finalizer
– Signal Dispatcher
– Attach Listener
– main
– Monitor Ctrl-Break

system 线程组包含 4 个线程 Reference Handler、Finalizer、Signal Dispatcher、Attach Listener 和一个线程组 main,main 线程组还包含两个线程 main 和 Monitor Ctrl-Break。

各个线程的作用如下:

线程 作用
Reference Handler 处理引用类型
Finalizer 负责回收时调用对象的finalize方法
Signal Dispatcher 接收信号,比如kill -9 , kill -3
Attach Listener 负责接收外部的命令,例如 jmap 和 jstack,执行命令并且把结果返回给发送者
main 主线程
Monitor Ctrl-Break 接收ctrl+c 退出信号

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注