Инструмент для анализа производительности Java-кода - PullRequest
0 голосов
/ 02 ноября 2011

Есть много инструментов для качества кода. Но иногда нужно повысить производительность также, если код не соответствует правилам качества трески. Существует какой-нибудь инструмент с открытым исходным кодом для этого? Спасибо.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2011

Для этого нет инструмента, но вы можете попробовать jVisualVM.

http://download.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html

Обычно он поставляется с вашим JDK. @ C:\Program Files\Java\jdk1.6.0_21\bin

0 голосов
/ 05 ноября 2011

Я не могу ответить вам относительно качества кода. Другие могут. Но когда вам «нужно повысить производительность», я скорее скажу вам, как это сделать, чем расскажу, какие инструменты использовать.

Есть инструменты, но важнее, чем инструменты, понимание того, что вы делаете. Самое главное - понять, что измерение не говорит вам, что нужно исправить, чтобы получить более высокую производительность; это только говорит о том, сколько улучшений вы получили.

Способ повышения производительности - найти действий, какими бы они ни были, которые составляют значительную долю времени и могут быть улучшены . Измерение не найти. Пример:

Я могу вручную несколько раз просмотреть состояние программы и видеть его большую часть времени, выполняя манипуляции с классами контейнеров, такие как выборка элементов, тестирование на конечные условия и т. Д. (Это находка часть.) Это может происходить во многих местах кода, поэтому, похоже, что никакая конкретная процедура не приводит к потере значительной части времени. Здесь нет особой точки доступа или явного узкого места. Не существует «плохого алгоритма» или «медленной рутины», о которых люди говорят, что ищут. Тем не менее, в этих нескольких примерах я вижу, что он выполняет операции с классами контейнеров, и я точно вижу, где. Если я могу заменить эти операции класса контейнера чем-то другим, выполняющим ту же цель, я могу сэкономить время. Сколько времени? Примерно в течение доли времени я видел, как происходили эти операции, и это может быть довольно большим.

Реальная отдача от этого заключается в том, что может быть несколько проблем. Предположим, проблема A стоит 40% времени, B стоит 20%, а C стоит 10%, и общее время, скажем, 10 секунд. Вы идете за А, самый очевидный. Исправление сокращает время до 6 секунд. (Ускорение 10/6 = 1,67). Тогда проблема B занимает больший процент времени (2/6 = .33), поэтому ее легче найти по выборкам. Исправление сокращает время до 4 секунд (ускорение 6/4 = 1,5) Тогда C равно (1/4 = 25%), и его гораздо легче найти, чем раньше. Его удаление сокращает время до 3 секунд (ускорение 4/3 = 1,33). Общий коэффициент ускорения составляет 10/3 = 3,33. Вы можете посмотреть на это как на составное произведение каждого ускорения: 10/6 * 6/4 * 4/3 = 10/3.

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

0 голосов
/ 02 ноября 2011

Ни один инструмент не скажет вам производительность и качество. Оба трудно измерить.

Вы, конечно, можете использовать что-то вроде FindBugs или IntelliJ's Inspector для проверки вашего кода, но они просто будут искать нарушения правил. Я не знаю инструмент, который будет указывать, когда я написал код, который работает плохо. Как инспектор кода Java узнает, что в вашей базе данных нет индексов?

...