VisualVM — найти все ссылки на класс

Я пытаюсь отладить ошибку permgen в приложении. Я запускаю VisualVM для профилирования приложения и делаю дамп моментального снимка памяти.

Загружая снимок в VisualVM для анализа, в настоящее время я вижу в списке классов несколько классов, появляющихся несколько раз, все перечисленные с 0 экземплярами, размером 0 - я ожидаю только один из этих классов каждый (вероятно, связанный с его загрузчиком классов) - есть ли любой способ определить, что все еще содержит ссылки на эти классы без экземпляров? С удовольствием использую другой инструмент, если я могу просто загрузить дамп (.hprof), чтобы проанализировать, что содержит ссылку.

Спасибо!


person rhinds    schedule 15.01.2013    source источник
comment
Я использовал YourKit для этого в прошлом. Он может загрузить дамп. Вы можете получить бесплатную лицензию eval.   -  person Peter Lawrey    schedule 15.01.2013
comment
Ответ @barneypitt ниже является правильным для этого вопроса.   -  person agam    schedule 23.06.2020


Ответы (2)


Я использую MAT для подобных вещей. Отлично работает даже на больших кучах.

person K Erlandsson    schedule 15.01.2013
comment
Спасибо - только что наткнулся на еще одну рекомендацию для MAT - установил в Eclipse, поэтому загружу журналы, чтобы посмотреть, что я могу найти. - person rhinds; 15.01.2013

Ну, фраза «используйте MAT» на самом деле не отвечает на вопрос!

Чтобы сделать это в VisualVM, в представлении Sampler или Profiler есть кнопка (вверху справа) с надписью «Heap Dump». Нажмите здесь, чтобы открыть анализатор кучи. На вкладке «Классы» отображаются все загруженные классы. Внизу есть поле поиска, введите имя интересующего вас класса, в отфильтрованном представлении дважды щелкните нужный класс.

Откроется представление экземпляров. Щелкните правой кнопкой мыши экземпляр на левой панели и выберите «Показать ближайший корень GC», чтобы найти, что ссылается на объект.

Барни

person barneypitt    schedule 06.12.2015