обучающие сайты по устранению утечек памяти Java

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

Я пробовал такие инструменты, как Jhat, JMap, VisualVM и MAT.

где лучше всего узнать об устранении утечек памяти Java? предложение книги также приветствуется.

заранее спасибо.


person Geek    schedule 30.07.2012    source источник
comment
еще не пробовал JProf. Завтра день :-)   -  person Geek    schedule 30.07.2012
comment
но нет волшебного инструмента, который мог бы что-то сделать за вас... все они хороши для конкретных случаев использования. если бы это было возможно, я бы предложил valgrind. все сводится к тому, что вы знаете, как использовать инструмент и понимаете результат :)   -  person Shark    schedule 30.07.2012
comment
Я настоятельно рекомендую использовать ваш профилировщик java. это не бесплатно, но это стоит денег.   -  person jtahlborn    schedule 30.07.2012
comment
если вы открываете свой кошелек, вы можете даже выложить немного долларов за Chronon и продолжать воспроизводить сценарий утечки.   -  person Shark    schedule 30.07.2012


Ответы (2)


Пробовали ли вы искать в интернете? Существует множество примеров. Хорошая поисковая система отсортирует их по релевантности.

person Amir Afghani    schedule 30.07.2012
comment
Спасибо за ответ, в нем была нотка высокомерия :-). Я прошел через множество сайтов (в том числе и этот). Моя проблема в том, что приложения реального мира сильно отличаются от этих игрушечных приложений, которые в основном обсуждаются. Дамп реального мира заполнен объектами char[] и String, как сортировать и работать с тысячами таких объектов. большинство из них кажутся действительными :-( Да, я новичок в Java-дампах. - person Geek; 30.07.2012
comment
@Geek - ты прав, извини. Я сегодня выпил слишком много кофе. Можете ли вы вставить свой пример дампа и посмотреть, можем ли мы помочь больше? - person Amir Afghani; 30.07.2012
comment
@Geek, я предлагаю вам использовать ознакомительную версию профессионального профилировщика. Я использую YourKit, и это хорошо для сортировки большого количества данных и поиска горячих точек. - person Peter Lawrey; 31.07.2012
comment
@AmirАфгани и Питер: Спасибо за ответ. У меня вопрос: большая часть моего дампа просто заполнена строками и char[]. Интересно, что есть большие повторяющиеся строки, но когда я делаю пути к GC в VisualVM, я обычно не нахожу корней. Не могли бы вы пролить свет на это. - person Geek; 31.07.2012

Есть много видов утечек памяти, но на практике следующая стратегия дает хорошие результаты (Отказ от ответственности: я показываю снимки экрана с JProfiler, потому что его разработала моя компания):

<сильный>1. Проверьте самые большие объекты

Самые большие объекты сохраняют много памяти, которой больше никто не держит. В JProfiler их можно найти в представлении «Самые большие объекты» обходчика кучи. Такое часто случается с кешами.

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

<сильный>2. Проверяйте классы с большим количеством экземпляров

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

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

Кроме того, проверка того, где были выделены экземпляры (в отличие от того, как на них ссылаются), часто может дать представление о том, что происходит.

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

Часто это многоэтапный процесс: выбор цепочек ссылок, точек размещения или выбор на основе содержимого объектов.

<сильный>3. Поиск путей к корням GC

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

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

Существует также каст экрана по этой теме.

person Ingo Kegel    schedule 31.07.2012
comment
@Kegel: большая часть моего дампа просто заполнена строками и символами []. Интересно, что есть большие повторяющиеся строки, но когда я делаю пути к GC в VisualVM, я обычно не нахожу корней :-( Насколько я понимаю, эти объекты должны быть собраны мусором, но существуют более 1 дня в куче? - person Geek; 31.07.2012
comment
@Geek Объекты без ссылок могут находиться в куче в течение длительного времени, это зависит от того, в каком поколении они находились, когда на них не ссылались. Другая возможность состоит в том, что строки имеют мягкую или слабую ссылку, поэтому нет пути к корню GC. JProfiler (по умолчанию) удаляет объекты со слабыми ссылками при анализе моментального снимка кучи, потому что они обычно усложняют анализ. - person Ingo Kegel; 31.07.2012
comment
Довольно часто можно увидеть строки и их внутренний char[] в верхней части кучи в любом приложении Java. Вы можете испытать удачу с объектами, которые идут после них в списке самых больших объектов. - person Nikem; 31.07.2012