Поток DestroyJavaVM всегда работает

при профилировании моего приложения я столкнулся с странным поведением-поток DestroyJavaVM всегда работает-100% времени.

enter image description here Проведя небольшое исследование по этому вопросу, по которому практически нет никакой ценной информации в Интернете, я понял, что эта тема должна разгрузите JVM при выходе.

Если это так, почему этот поток находится в рабочем состоянии 100% времени с самого первого момента I запустить мое приложение? Разве он не потребляет ценные ресурсы и поэтому может вызвать OutOfMemoryError (Как я иногда)?

есть ли официальная ссылка на то, что этот поток на самом деле делает и что вызывает его инициализацию?

спасибо

1 ответов


это происходит потому, что большинство приложений запускаются в потоках.

все POJO-класс приложения начинаются с вызова main метод. В самом простом случае этот метод будет выполнять всю работу, создавая объекты,вызывая методы и т. д. После main завершает, JVM говорят, чтобы закрыть с помощью DestroyJavaVM поток, который ждет завершения всех не-демонических потоков, прежде чем выполнять свою работу. Это необходимо для того, чтобы все созданные вами не-демонические потоки выполнялись до завершения JVM снесен.

приложение с GUI, однако, обычно работает как несколько потоков. Один для просмотра системных событий, таких как события клавиатуры или мыши. Одно для поддержания окон и дисплея etc. The main метод такого приложения, вероятно, просто запустит все необходимые потоки и выйдет. Он по-прежнему создает DestroyJavaVM поток, но теперь все, что делает, это дождаться завершения всех созданных потоков, прежде чем сорвать виртуальную машину.

в результате, любое приложение это создает потоки и полагается исключительно на их функциональность, всегда будет иметь DestroyJavaVM поток, ожидающий завершения. Так как все это делаю joining все остальные запущенные потоки он не потребляет никаких ресурсов.