Какой GC использовать при профилировании памяти? - PullRequest
1 голос
/ 14 марта 2011

Я использую профилировщик NetBeans (который на самом деле является встроенным VisualVM) для контроля потребления памяти моими приложениями Java.Я использую представление heap , представление выжившего поколения и дампы памяти для отслеживания утечек памяти.

Представление кучи показывает общее количествоиспользованная память, но это немного хаотично из-за того, как сборщик мусора управляет памятью.График по существу имеет форму пилообразной формы и поэтому не особенно удобочитаем.Иногда я заставляю GC происходить, чтобы я мог получить более точное значение реального потребления памяти.

Мне было интересно: есть ли сборщик мусора, который больше подходит для профилирования памяти, и которыйполучить график кучи ближе к реальному использованию памяти?Или, в более общем смысле, какие настройки JVM (-XX или другие) можно использовать для эффективного отслеживания утечек памяти?

example heap graph

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

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

1 голос
/ 14 марта 2011

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

Если вам нужен график, который будет более читабельным, но не настолько реалистичным, вы можете увеличить минимальный объем памяти, скажем, до 1 ГБ. Это приведет к меньшему количеству сборщиков мусора и меньшему количеству кривых, но не поможет вам, за исключением того, что граф станет красивее.

...