Что такое хороший отладчик Java? - PullRequest
5 голосов
/ 28 августа 2010

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

Спасибо.

Ответы [ 4 ]

5 голосов
/ 28 августа 2010

Взгляните на jvisualvm в JDK - подмножестве профилировщика Netbeans - который может подключаться к работающему процессу Java 6, позволяет профилировать его и выполнять анализ памяти.

https://visualvm.dev.java.net/gettingstarted.html

1 голос
/ 28 августа 2010

Я использовал множество инструментов, чтобы выяснить, почему моя программа съела более 100 МБ ОЗУ, отшлифовал код, чтобы устранить любые возможные утечки памяти.Позже я обнаружил, что, как только jvm забирает некоторую память из ОС, я не всегда возвращаю ее, даже если эта память не используется, что часто выглядит как утечка памяти.Это зависит от -Xmx и -XX: MaxHeapFreeRatio.Я установил для Xmx значение 40, что примерно соответствует объему памяти, которое должно использовать мое приложение, и использование памяти остается в пределах 10–15 Мбайт этого диапазона, а не увеличивается бесконтрольно.

Кроме того, jconsole - отличный инструмент.Поставляется с JDK.

0 голосов
/ 28 августа 2010

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

http://perfinsp.sourceforge.net/

Производительность Java-приложения прямо пропорциональна тому, как JVM выполняет ваше приложение. Этот инструмент дает очень хорошую информацию о профилировании JVM. Но это не графический инструмент, вам нужно просмотреть созданный текстовый файл. Но это одноразовое усилие, и вы можете воспользоваться этим инструментом. Я много раз использовал его для решения проблем, связанных с производительностью, и он мне очень помог.

0 голосов
/ 28 августа 2010

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

Мне потребовалось 2 полных дня, чтобы понять, что один из моих пользовательских классов редактора ячеек JTable выделял JDialog при создании экземпляра, фактически не открывая его, а собственная часть диалога сохраняла экземпляр редактора ячеек заблокированным, таким образом, таблица , таким образом, экран и, следовательно, все объекты сущностей, которые были связаны с ним.

...