我发现当应用程序启动时,DestroyJavaVM 线程使用了 99% 的 cpu(大约一个 cpu 核心)。我找不到该线程的任何文档。 StackOverflow 中的一个答案说该线程除了加入其他非守护线程之外什么也不做。这让我很困惑为什么应用程序启动时它会使用这么多的CPU。我还发现一篇文章说DestroyJavaVM线程是其他线程的父线程,top命令将所有子线程的使用率累加到父线程。但是当我使用 pstree 命令显示 java 线程树时,情况并非如此。
最佳答案
DestroyJavaVM
不是一个单独的线程。它基本上是一个启动 VM 关闭的 Java 线程,即最后一个非守护程序应用程序线程,或者调用 System.exit()
的线程。
当 JVM 即将终止时,它将当前线程重命名为 DestroyJavaVM
并使用该线程启动关闭序列。
对于简单应用程序,当所有业务逻辑都是从 main
方法调用时,主线程将被重命名为 DestroyJavaVM
。 main
方法返回。您观察到的可能只是消耗 CPU 来完成其主要工作的主线程。
关于JAVA DestroyJavaVM线程CPU过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61062002/