Как определить размер Permgen в приложении Java (т. Е. Программно)?

StackOverflow https://stackoverflow.com/questions/4071440

Вопрос

  1. Есть ли способ измерить в настоящее время использовал Размер постоянного поколения (Permgen) в моем приложении Java? Я не могу использовать внешние инструменты профилирования, такие как VisualVM.

  2. Даже лучше будет оценка потребления памяти класса Java в Prengen. Это почти пропорционально размеру файла Bytecode?

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

где варианты являются одним из:

-Не: печатать резюме кучи Java

-Перемстат: печатать статистику постоянного поколения

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

-XX:PermSize=164m

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top