Как проанализировать содержание PermGen?

Я хочу заставить дамп PermGen видеть, почему он заполняется. Существует ли способ проанализировать это? Я уже знаю об общих подозреваемых как log4j, веб-приложение кота, перезагружающее и т.д., но я имею некоторый пользовательский код генерации прокси в своем приложении также и просто хочу посмотреть под капотом.

Действительно ли это возможно так или иначе?

25
задан Daniel 16 May 2010 в 07:56
поделиться

3 ответа

Вы можете использовать флаги:

-XX:+TraceClassLoading -XX:+TraceClassUnloading

Они печатают идентификаторы классов по мере их загрузки / выгрузки от постоянного поколения. Если вы добавите -XX: + PrintGCDetails , вы также сможете отслеживать размер permgen.

Обратите внимание, что я не уверен, что флаги поддерживаются в JVM, отличных от Sun.

Еще одним подозреваемым в PermGen-ошибках нехватки памяти является интернирование строк . Проверьте места, где вы вставляете строки в свой код.

18
ответ дан 28 November 2019 в 20:45
поделиться

Если вы хотите получить список всех загруженных классов, вы можете использовать jconsole. Нажмите на вкладку классов, затем нажмите «Подробный вывод». Это приведет к печати каждого загруженного класса в stdout. Я нашел это очень полезным для отслеживания проблемы прокси-класса JAXB.

Возможно, потребуется запустить приложение с параметром командной строки -Dcom.sun.management.jmxremote, чтобы jconsole можно было присоединить к нему.

4
ответ дан 28 November 2019 в 20:45
поделиться

Подойдет ли jmap -permgen?

См. руководство по устранению неполадок в Java http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/memleaks.html#gbyuu

4
ответ дан 28 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: