Есть много видов утечек памяти, но на практике следующая стратегия дает хорошие результаты (Отказ от ответственности: я показываю снимки экрана с JProfiler, потому что его разработала моя компания):
<сильный>1. Проверьте самые большие объекты
Самые большие объекты сохраняют много памяти, которой больше никто не держит. В JProfiler их можно найти в представлении «Самые большие объекты» обходчика кучи. Такое часто случается с кешами.
![введите здесь описание изображения](https://i.stack.imgur.com/i8CY5.png)
<сильный>2. Проверяйте классы с большим количеством экземпляров
Иногда ссылки более сложные, и самые большие объекты не дают подсказки. Классы с большим количеством экземпляров можно проверить на входящие ссылки. Во-первых, полезно просмотреть совокупные ссылки, чтобы отделить действительные цепочки ссылок от подозрительных цепочек ссылок.
![введите здесь описание изображения](https://i.stack.imgur.com/chvU3.png)
Кроме того, проверка того, где были выделены экземпляры (в отличие от того, как на них ссылаются), часто может дать представление о том, что происходит.
![введите здесь описание изображения](https://i.stack.imgur.com/yclnI.png)
Часто это многоэтапный процесс: выбор цепочек ссылок, точек размещения или выбор на основе содержимого объектов.
<сильный>3. Поиск путей к корням GC
Если это все еще не дает подсказки, вы можете выбрать отдельные объекты и показать их цепочки ссылок, которые ведут к корням сборщика мусора. Это помогает многим из вас сузить набор подозрительных объектов, прежде чем пытаться это сделать, иначе у вас может быть много кандидатов.
![введите здесь описание изображения](https://i.stack.imgur.com/7bbHs.png)
Существует также каст экрана по этой теме.
person
Ingo Kegel
schedule
31.07.2012