Я хотел бы видеть, какой код в тысячах строк исходного кода запускается чаще всего и занимает больше всего времени. Целью этого будет оптимизация.
Возможность видеть, какие части кода выполняются чаще всего, важна для оптимизации, потому что именно на этих частях я должен сосредоточиться, чтобы ускорить работу. В то же время, конечно, некоторый код выполняется очень часто, но практически не требует времени, поэтому также важно иметь возможность увидеть, какой код занимает больше всего времени.
Я предполагаю, что лучшим из обоих миров была бы программа, которая складывает количество времени, которое занимает кусок кода, включая ВСЕ время его выполнения (для этого выясняется, что замедляет ваш код в целом). Есть ли какие-то инструменты для этого?
Ответы:
То, что вы ищете, это профилирование :
Есть несколько таких приложений. Иногда они встроены в саму IDE. NetBeans Ide - это один из таких инструментов, в который встроен профилировщик .
Другим таким инструментом является визуальный VM .
Профилировщики могут работать по-разному - и нужно знать о различиях. Один из подходов - каждую секунду делать снимок запущенных потоков и видеть, какие методы в данный момент вызываются для каждого потока. Это использует выборку того, что там.
Другой подход заключается в том, чтобы инструктировать байт-код Java, чтобы сообщать время запуска и остановки другому приложению.
Написание профилировщика не очень сложно для одного опытного Java. У IBM есть статья о написании вашего собственного профилировщика (с исходным кодом!). Этот основан на Интерактивном Профилировщике Java .
Существует множество профилировщиков - как бесплатных, так и коммерческих (как насчет профилировщика, подключенного к запущенным экземплярам JVM, который может сообщить вам (электронная почта или другое уведомление), когда конкретные методы превышают ожидаемое время выполнения? Или подключен к программа, которая сообщает, когда веб-запросы заняли слишком много времени - сохранен ли исторический профиль для этого запроса для последующей проверки?). Вам просто нужно знать, что вы ищете, чтобы начать их искать и идти оттуда.
Получив профилировщик, вы приступаете к интерпретации результатов профилирования .
источник