在分析我的应用程序时,我遇到了一个奇怪的行为 - DestroyJavaVM 线程始终在运行 - 100% 的时间。
在对这个主题做了一些研究之后,网上几乎没有任何有值(value)的信息,我所理解的是这个线程应该是 unload the JVM upon exit .
如果是这样,为什么从我启动我的应用程序的第一刻起,这个线程就有 100% 的时间处于 RUNNING 状态?它不会消耗宝贵的资源并因此可能导致 OutOfMemoryError
(就像我有时遇到的那样)吗?
是否有任何关于此线程实际执行的操作以及触发其初始化的官方引用?
谢谢
最佳答案
发生这种情况是因为大多数应用程序都是在线程中运行的。
全部POJO应用程序首先调用 main
方法。在最简单的情况下,此方法将完成所有工作,创建对象、调用方法等。main
完成后,使用 DestroyJavaVM
告知 JVM 关闭等待所有non-daemon threads的线程在开始工作之前完成。这是为了确保您创建的任何非守护线程在 JVM 被拆除之前运行完成。
然而,具有 GUI 的应用程序通常作为多个线程运行。一种用于监视系统事件,例如键盘或鼠标事件。一种用于维护窗口和显示等。这种应用程序的 main
方法可能只会启动所有必需的线程并退出。它仍然会创建 DestroyJavaVM
线程,但现在它所做的只是等待您创建的所有线程完成,然后再拆除 VM。
因此,任何创建线程并完全依赖其功能的应用程序将始终有一个 DestroyJavaVM
线程等待它完成。由于它所做的只是加入
所有其他正在运行的线程,因此它不会消耗任何资源。
关于java - DestroyJavaVM 线程始终运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34433267/