用visualvm监控jvm时,我发现DestroyJavaVm线程(垃圾回收器守护线程)从始至终一直处于running状态(这样岂不是一直在耗费cpu?)。
对此很好奇找到了如下答案,但也没解决疑问,Since all it is doing is joining all other running threads it does not consume any resources.
这句话是说DestroyJavaVm会join其他线程,所以不会一直消耗cpu,但join其他线程本质就是wait其他线程,所以上面的visualvm监控,DestroyJavaVm不应该中间有wait状态吗,为什么自始至终都是running?求大神解答
https://www.it1352.com/975163.html
=================================================
多补充下DestroyJavaVM的其他知识(https://www.javatang.com/archives/2017/10/19/51301886.html这里搜到的)
"DestroyJavaVM"
执行main()的线程在执行完之后调用JNI中的 jni_DestroyJavaVM() 方法会唤起DestroyJavaVM 线程。在JBoss启动之后,也会唤起DestroyJavaVM线程,处于等待状态,等待其它线程(java线程和native线程)退出时通知它卸载JVM。
"DestroyJavaVM" prio=5 tid=0x00007fc6b3001000 nid=0x1903 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE