JAVA DestroyJavaVM线程CPU过高

标签 java multithreading jvm

我发现当应用程序启动时,DestroyJavaVM 线程使用了 99% 的 cpu(大约一个 cpu 核心)。我找不到该线程的任何文档。 StackOverflow 中的一个答案说该线程除了加入其他非守护线程之外什么也不做。这让我很困惑为什么应用程序启动时它会使用这么多的CPU。我还发现一篇文章说DestroyJavaVM线程是其他线程的父线程,top命令将所有子线程的使用率累加到父线程。但是当我使用 pstree 命令显示 java 线程树时,情况并非如此。

最佳答案

DestroyJavaVM 不是一个单独的线程。它基本上是一个启动 VM 关闭的 Java 线程,即最后一个非守护程序应用程序线程,或者调用 System.exit() 的线程。

当 JVM 即将终止时,它将当前线程重命名为 DestroyJavaVM 并使用该线程启动关闭序列。

对于简单应用程序,当所有业务逻辑都是从 main 方法调用时,主线程将被重命名为 DestroyJavaVMmain 方法返回。您观察到的可能只是消耗 CPU 来完成其主要工作的主线程。

关于JAVA DestroyJavaVM线程CPU过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61062002/

相关文章:

functional-programming - 是否会有功能语言对Java社区起作用,而F#对.NET社区起作用?

java - 如何在 64 位 jvm 上运行 32 位 jar

java - 如何用JAVA从txt文件中删除最后一行brak行?

带有附加信息的 Java 异常处理

java - 无法在 Selenium WebDriver 的段落标记中使用 sendKeys() 方法

c++ - shared mutex 和 mutex 之间的区别(为什么两者都存在于 C++ 11 中)?

c++ - 我应该如何在一个函数中锁定 wxMutex 并在另一个函数中解锁它?

java - Java 中如何杀死一个线程?

Java 世界的本地化方法 - 有什么隐含的含义吗?

java - 有没有办法知道计时器任务是否已完成?