Как Java VisualVM показывает потоки, которые не запущены / не завершены? - PullRequest
0 голосов
/ 13 ноября 2018

enter image description here

Для тестирования я создал поток, в котором только что спал.И я знаю, что GC не собирает их некоторое время, даже если их использование завершено, но если вы не сохраните их как объект после того, как они выполнят свою задачу, их следовало бы пропустить.

Так что для целей тестирования я использовалJava VisualVM, но я впервые использую его.И я вижу все эти потоки таймера, лежащие с 0 мс, но я все еще вижу их.Это нормально?И что это значит?Если я спамлю тысячи из них, это замедлит мое приложение?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы видите все эти Thread- потоки, потому что по умолчанию VisualVM покажет вам все потоки (включая те, которые были закончены во время сеанса мониторинга). Чтобы увидеть только темы Live, переключите комбо View с All threads на Live threads. VisualVM не хранит ссылки на все запущенные потоки, их можно просто собрать мусором.

0 голосов
/ 14 ноября 2018

Как только VisualVM подключится к работающей JVM, it сохранит ссылки на все запущенные потоки, поэтому эти объекты Thread не будут собираться мусором, когда потоки прекращают работать.

Они сохраняются в VisualVM, поэтому вы все еще можете видеть статистику, собранную для них.

Объекты Thread станут недоступными и GC'able после выхода из VisualVM, поэтому остановка и перезапуск VisualVM "очистят" список завершенных потоков.

...