Поток DestroyJavaVM всегда работает
при профилировании моего приложения я столкнулся с странным поведением-поток DestroyJavaVM всегда работает-100% времени.
Проведя небольшое исследование по этому вопросу, по которому практически нет никакой ценной информации в Интернете, я понял, что эта тема должна разгрузите JVM при выходе.
Если это так, почему этот поток находится в рабочем состоянии 100% времени с самого первого момента I запустить мое приложение? Разве он не потребляет ценные ресурсы и поэтому может вызвать OutOfMemoryError
(Как я иногда)?
есть ли официальная ссылка на то, что этот поток на самом деле делает и что вызывает его инициализацию?
спасибо
1 ответов
это происходит потому, что большинство приложений запускаются в потоках.
все POJO-класс приложения начинаются с вызова main
метод. В самом простом случае этот метод будет выполнять всю работу, создавая объекты,вызывая методы и т. д. После main
завершает, JVM говорят, чтобы закрыть с помощью DestroyJavaVM
поток, который ждет завершения всех не-демонических потоков, прежде чем выполнять свою работу. Это необходимо для того, чтобы все созданные вами не-демонические потоки выполнялись до завершения JVM снесен.
приложение с GUI, однако, обычно работает как несколько потоков. Один для просмотра системных событий, таких как события клавиатуры или мыши. Одно для поддержания окон и дисплея etc. The main
метод такого приложения, вероятно, просто запустит все необходимые потоки и выйдет. Он по-прежнему создает DestroyJavaVM
поток, но теперь все, что делает, это дождаться завершения всех созданных потоков, прежде чем сорвать виртуальную машину.
в результате, любое приложение это создает потоки и полагается исключительно на их функциональность, всегда будет иметь DestroyJavaVM
поток, ожидающий завершения. Так как все это делаю join
ing все остальные запущенные потоки он не потребляет никаких ресурсов.