Как проверить, почему JVM не может завершиться

#java #jvm #daemon #shutdown

#java #jvm #демон #завершение работы

Вопрос:

У меня есть программа, которая достигла конца метода запуска spring boot, но она все еще не завершается. Вот список потоков, запущенных при просмотре в Eclipse Debug:

введите описание изображения здесь

Вот что я вижу после приостановки потоков:

введите описание изображения здесь

Вот дамп потока

введите описание изображения здесь

Моя программа считывает данные из потока сообщений, который завершается должным образом, а также использует H2 db, который, как я полагаю, завершается, когда программа завершается нормально. Я не в состоянии понять, что мешает JVM завершить работу и как действовать в этой ситуации, увидев список запущенных потоков.

Комментарии:

1. Похоже, «Catalina-utility-1» и «container-0» заняты какими-то делами. Можете ли вы приостановить эти потоки и посмотреть, что происходит? Возможно, они поддерживают работоспособность вашей виртуальной машины; поток DestroyJavaVM сможет принудительно уничтожить потоки демонов без сожаления.

2. @NotaJD обновленный вопрос

3. Вомп, я неправильно выразился. Похоже, что DestroyJavaVM заботится о присоединении ко всем потокам, не относящимся к демонам, а сама виртуальная машина заботится о демонах. Помимо этого: делаете ли вы что-нибудь необычное с конфигурацией контейнера или конфигурацией DispatcherServlet?

4. Я не касался конфигурации контейнера или конфигурации сервлета диспетчера. будет интересно проверить, хотя.