Профилирование Java-кода - PullRequest
1 голос
/ 06 ноября 2010

Я пытаюсь профилировать программу веб-поиска Java под названием Nutch из исходного кода. Насколько я понимаю, для профилирования мне нужно включить профилирование в компиляторе, чтобы сгенерировать файл профиля для открытия в программе, такой как GProf. Как мне это сделать, если все, что я делаю для компиляции программного обеспечения, - это запуск ANT в корневом каталоге источника?

Ответы [ 3 ]

3 голосов
/ 06 ноября 2010

Если вы используете более новую версию JDK (последняя версия 1.6 с обновлением 7 или выше), вам не нужно ничего делать, если подготовить процесс Java к профилированию.Просто используйте JVisualVM (который поставляется с JDK), чтобы присоединиться к вашему процессу, и нажмите кнопку профиля.

1 голос
/ 07 ноября 2010

В ответ на ответ @ Charlie вы говорите, что в идеале вам нужна информация о как программа тратит свое время.

Есть и другая точка зрения - вам нужно знать , почему программа тратит свое время.

Причина, по которой каждый цикл тратится, - это цепочка причин, где каждая ссылка представляет собой строку кода в стеке вызовов. Цепь не сильнее, чем ее самое слабое звено.

Если программа не работает настолько быстро, насколько это возможно, у вас есть "узкие места".

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

Если будет взято 10000 образцов стека, это будет около 2000 из них. Если будет взято 10 образцов, то в среднем будет 2 из них.

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

Это основа этой техники .

Несмотря на это, размышления в терминах gprof концепций не будут вам полезны.

0 голосов
/ 06 ноября 2010

Вы действительно задаете вопрос муравья здесь.Вы можете добавить флаги командной строки для компилятора в качестве атрибутов в файле ant для цели компиляции.См. Тег <compilerarg> здесь .

Кстати, есть много хороших инструментов для профилирования.Посмотрите на этот поиск в Google .

...