当前位置:  开发笔记 > 编程语言 > 正文

DestroyJavaVM线程始终在运行

如何解决《DestroyJavaVM线程始终在运行》经验,为你挑选了1个好方法。

在分析我的应用程序时,我遇到了一个奇怪的行为 - DestroyJavaVM线程始终在运行 - 100%的时间.

在此输入图像描述 在对该主题进行了一些研究之后,在网上几乎没有任何有价值的信息,我所理解的是该线程应该在退出时卸载JVM.

如果是这种情况,为什么这个线程从我开始申请的第一个时刻起100%的时间处于RUNNING状态?它是否消耗了宝贵的资源,因此可能导致OutOfMemoryError(像我有时得到的)?

是否有任何关于此线程实际执行的内容以及触发其初始化的内容的官方参考?

谢谢



1> OldCurmudgeo..:

这是因为大多数应用程序都在线程中运行.

所有POJO应用程序都从调用该main方法开始.在最简单的情况下,此方法将完成所有工作,创建对象,调用方法等.一旦main完成,JVM将被告知使用DestroyJavaVM等待所有非守护程序线程完成的线程关闭,然后再进行工作.这是为了确保您创建的任何非守护程序线程在JVM拆除之前运行完成.

但是,具有GUI的应用程序通常作为多个线程运行.一个用于监视系统事件,如键盘或鼠标事件.一个用于维护窗口和显示等main.这种应用程序的方法可能只是启动所有必需的线程并退出.它仍然创建DestroyJavaVM线程,但现在所做的就是在拆除VM之前等待所有创建的线程完成.

因此,任何创建线程并仅依赖于其功能的应用程序总是会有一个DestroyJavaVM等待它完成的线程.由于它正在执行的是join所有其他正在运行的线程,因此它不会消耗任何资源.


@KidCrippler - 它是在`main`退出后创建并启动的.参见[Thread.join()](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Thread.java#Thread.join%28long %29)为什么它处于"Running"状态 - 它在紧密循环中使用`wait(0)`.
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有