Как определить размер PermGen в приложении Java (то есть программно)? - PullRequest
7 голосов
/ 01 ноября 2010
  1. Можно ли измерить текущий используемый размер постоянного поколения (PermGen) в моем Java-приложении? Я не могу использовать внешние инструменты профилирования, такие как VisualVM.

  2. Еще лучше было бы оценить потребление памяти классом Java в PermGen. Это почти пропорционально размеру файла байт-кода?

Ответы [ 5 ]

9 голосов
/ 01 ноября 2010

Вы можете использовать MemoryMXBean, который поставляется с JDK.Но я не думаю, что есть способ запросить использование permgen из запущенного приложения.Документы о MemoryMXBean .

2 голосов
/ 01 ноября 2010

Вы можете использовать jvisualvm инструмент из JDK с плагином Visual GC для мониторинга всех областей кучи JVM, включая PermGen.

2 голосов
/ 01 ноября 2010

Если вы не используете Windows, вы можете попробовать jmap , который поставляется с JDK.

1 голос
/ 09 сентября 2013

Вы можете использовать команду jmap:

jmap [опция] (подключиться к запущенному процессу)

jmap [опция] (для подключения к файлу ядра)

jmap [опция] [сервер_ид @] (для подключения к удаленному серверу отладки)

, где один из вариантов:

-heap: напечатать сводную информацию о куче java

-permstat: вывод статистики постоянной генерации

0 голосов
/ 01 ноября 2010

Размер PermGen не имеет ничего общего с размером ваших файлов классов.По умолчанию размер PermGen по Sun равен 64 МБ.Если вы хотите увеличить его, вы можете установить его явно, используя:

-XX:PermSize=164m

в командной строке Java или в скрипте запуска.Это также, как вы можете узнать, на что он настроен, не полагаясь на внешний инструмент.

РЕДАКТИРОВАТЬ:

Прочтите эту статью, чтобы приблизительно определить, сколько PermGen в настоящее время используется программно (то есть без внешнегоинструменты):

http://frankkieviet.blogspot.com/2006/10/how-to-fix-dreaded-permgen-space.html

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