В чем разница между инструментами анализа памяти Java и инструментами обнаружения утечек памяти? - PullRequest
1 голос
/ 21 января 2010

Есть ли какая-либо разница между инструментами анализа памяти Java (профилировщиками, такими как Yourkit Java Profiler) и инструментами обнаружения утечек памяти Java? (Из моих поисков довольно трудно заметить разницу в том, что касается инструментов, но для меня это звучит как разница в подходе). Если есть, есть ли бесплатные (доступные для скачивания) инструменты для обнаружения утечек памяти (не для профилирования памяти)? Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Строго говоря, в Java нет утечек памяти в смысле C / C ++: выделение памяти без ссылки на нее.

Так что, когда термин «утечка» используется в контексте Java, иногда это просто означает большую структуру памяти. Некоторые инструменты называют их «подозреваемыми утечками», потому что они не могут судить, является ли структура памяти большой из-за характера проблемы или по ошибке.

И иногда «утечка» используется в динамическом смысле: структура памяти, которая со временем растет.

Итак, во-первых, вам нужен инструмент памяти, который дает количественный обзор распределения памяти и структуры реферера в снимке состояния дампа кучи Java. Имея это, вы можете исследовать динамическое поведение, сравнивая два или более снимка.

Если эти инструменты предлагают дополнительную «функцию утечки» (JP-Memory-Leak-Doctor, Eclipse-MATs Memory-Leak Report), это означает, что у них возникают проблемы с представлением действительно всестороннего представления о структурах памяти. 1009 *

Если вы ищете для бесплатной загрузки, посмотрите на

http://eclipse.org/mat/

и

http://dr -brenschede.de / bheapsampler /

1 голос
/ 21 января 2010

Думайте об инструментах обнаружения утечек памяти как о просто оптимизированной версии инструмента анализа памяти, который поможет вам найти проблему, не разбираясь с данными самостоятельно.

Я использовал Yourkit. Я бы сказал, что у этого есть обе особенности. Хотя он явно не указывает на «чувак, ваша утечка в этой строке кода», он предоставляет утилиту для сравнения снимков памяти, чтобы показать, что изменилось со временем, и предоставляет различные утилиты для отслеживания ссылок на объекты, чтобы выяснить, почему они все еще хранятся в памяти.

В зависимости от вашего определения инструментов обнаружения утечек, можно утверждать, что график в JConsole, показывающий использование динамической памяти, является инструментом обнаружения утечек. Посмотрите на график потребления кучи за достаточно длительный период использования ... если среднее значение продолжает расти, есть вероятность, что у вас есть утечка.

Я не связан с людьми из Yourkit, но я могу порекомендовать этот инструмент. Это может быть лучше, но это не плохо. Я использую его для анализа памяти и производительности процессора. Я регулярно тестирую нагрузку и память (JConsole / JMX и другие методы) нашего продукта и использую Yourkit, когда что-то кажется странным. Примерно раз в 2-4 месяца я делаю анализ ресурсов процессора, чтобы найти простые для устранения узких мест производительности (наше нагрузочное тестирование выявляет серьезные проблемы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...