Как узнать, какие части вашего кода выполняются чаще всего?

11

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

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

Я предполагаю, что лучшим из обоих миров была бы программа, которая складывает количество времени, которое занимает кусок кода, включая ВСЕ время его выполнения (для этого выясняется, что замедляет ваш код в целом). Есть ли какие-то инструменты для этого?

sinθ
источник
У вас есть предпочтения для операционной системы или языка программирования?
Mawg говорит восстановить Монику

Ответы:

15

То, что вы ищете, это профилирование :

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

Есть несколько таких приложений. Иногда они встроены в саму IDE. NetBeans Ide - это один из таких инструментов, в который встроен профилировщик . введите описание изображения здесь

Другим таким инструментом является визуальный VM .

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

Профилировщики могут работать по-разному - и нужно знать о различиях. Один из подходов - каждую секунду делать снимок запущенных потоков и видеть, какие методы в данный момент вызываются для каждого потока. Это использует выборку того, что там.

Другой подход заключается в том, чтобы инструктировать байт-код Java, чтобы сообщать время запуска и остановки другому приложению.

Написание профилировщика не очень сложно для одного опытного Java. У IBM есть статья о написании вашего собственного профилировщика (с исходным кодом!). Этот основан на Интерактивном Профилировщике Java .

Существует множество профилировщиков - как бесплатных, так и коммерческих (как насчет профилировщика, подключенного к запущенным экземплярам JVM, который может сообщить вам (электронная почта или другое уведомление), когда конкретные методы превышают ожидаемое время выполнения? Или подключен к программа, которая сообщает, когда веб-запросы заняли слишком много времени - сохранен ли исторический профиль для этого запроса для последующей проверки?). Вам просто нужно знать, что вы ищете, чтобы начать их искать и идти оттуда.

Получив профилировщик, вы приступаете к интерпретации результатов профилирования .

Сообщество
источник