Поиск источника создания потока в приложении Java

Я работаю над приложением Java, которое имеет проблемы с потоками.

Пока я использую приложения с подключенным профилировщиком Netbeans, я вижу, что создано несколько потоков. Большинство из них заканчивают в некоторых .5 seconds, Я мог только найти SwingWorkers, используемые в приложении.

Более того, большинство потоков, отображаемых профилировщиком, являются обычными, а не SwingWorkers. Я подозреваю, что если эти потоки не были созданы SwingWorker косвенно, некоторые библиотеки, используемые приложением, создают их.

Теперь я хотел бы удалить эту проблему. Но я не смог найти способ определить источник создания потока. Если вы можете предложить другой профилировщик / инструмент, с помощью которого я могу найти источник (метод) создания потока.

2 ответа

Решение

Если вы можете использовать Eclipse и его отладчик, попробуйте следующее:

  • Импортируйте код в проект Java.
  • Ctrl-Shift-T (открытый тип), введите "Thread". Откроется редактор двоичного кода для класса Thread.
  • Выберите все конструкторы Thread в представлении Outline, используйте контекстное меню "Toggle Method Breakpoint". Это создает точки останова для конструкторов.
  • Запустите и отладьте.

альтернативно

Вы можете получить профилировщик Java Yourkit, который также доступен для оценки. Он может отображать потоки, созданные в приложении, включая их трассировки стека (также после завершения потока). Он не показывает, где были созданы потоки, но трассировка стека потоков может дать вам некоторые подсказки об задействованных библиотеках.

JProfiler может сделать это. Представление монитора потока показывает трассировку стека, где был создан поток - если запись CPU была активна в то время:

Отказ от ответственности: моя компания разрабатывает JProfiler

Другие вопросы по тегам