JAVA虚拟机线程高CPU

JAVA虚拟机线程高CPU,java,multithreading,jvm,Java,Multithreading,Jvm,我发现当应用程序启动时,DestroyJavaVM线程使用了99%的cpu(大约一个cpu核心)。我找不到此线程的任何文档。StackOverflow中的一个答案是,这个线程什么也不做,只是加入其他非守护进程线程。这让我很困惑,为什么它在应用程序启动时会占用这么多cpu。我还发现一篇帖子说DestroyJavaVM线程是另一个线程的父线程,上面的命令将所有子线程的使用率累加到父线程。但是,当我使用pstree comman来显示java线程树时,情况并非如此。DestroyJavaVM不是一个单

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

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

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


对于一个简单的应用程序,当从
main
方法调用所有业务逻辑时,当
main
方法返回时,将是重命名为
DestroyJavaVM
的主线程。您观察到的可能只是主线程,它的主任务占用CPU。

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

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


对于一个简单的应用程序,当从
main
方法调用所有业务逻辑时,当
main
方法返回时,将是重命名为
DestroyJavaVM
的主线程。您观察到的可能只是主线程在其主任务中消耗CPU。

使用CPU的时间有多长?大约2-3秒@SolomonSlow其他线程使用CPU的时间是多少。C2Compiler线程和DestroyJavaVm线程之间有关系吗@SolomonSlow使用CPU的时间是多长?大约2-3秒@SolomonSlow其他线程使用CPU的时间是多少。C2Compiler线程和DestroyJavaVm线程之间有关系吗@所罗门斯洛