Есть ли способ измерить размер постоянного поколения (PermGen) в моем приложении Java? Я не могу использовать внешние инструменты для профилирования, такие как VisualVM.Как определить размер PermGen в приложении Java (т. Е. Программно)?
Еще лучше было бы оценить потребление памяти класса Java в PermGen. Он почти пропорционален размеру файла байткода?
ответ
Вы можете использовать MemoryMXBean, который поставляется с JDK. Но я не думаю, что есть способ запросить использование permgen из работающего приложения. Документы о MemoryMXBean.
Размер PermGen не имеет никакого отношения к размеру ваших файлов классов. По умолчанию размер PermGen в соответствии с Sun составляет 64 МБ. Если вы хотите его увеличить, вы можете установить его явно, используя:
в вашей командной строке Java или скрипте запуска. Это также то, как вы можете знать, на что оно настроено, не полагаясь на внешний инструмент. не
EDIT:
Прочитайте эту статью, чтобы определить, сколько примерно PermGen в настоящее время используется программно (т.е. без внешних инструментов):
http://frankkieviet.blogspot.com/2006/10/how-to-fix-dreaded-permgen-space.html
The * максимальный размер * не обязательно иметь ничего делать с размером любого файла. Но stefan ищет текущий (использованный) размер, а не максимальный размер. –
Согласно http://blogs.sun.com/jonthecollector/entry/presenting_the_permanent_generation, например. байт-коды методов класса влияют на размер PermGen! – s106mo
Я не указывал максимальный размер. Флаг для максимального размера perm - MaxPermSize –
Вы можете использовать jmap
команды:
jmap [опция] (для подключения к процессу запуска)
jmap [опция] (для подключения к основному файлу)
jmap [option] [server_id @] (для подключения к удаленному серверу отладки)
где опции является одним из:
-heap: напечатать РЕЗЮМЕ Java Heap
-permstat: печатать статистику постоянного поколения
благодарим вас за ответ, однако решающим моментом моего вопроса было то, что я хотел измерить потребление памяти в моем приложении (то есть программно) ... так что MemoryMXBean - это правильный путь – s106mo
Спасибо! Этот ответ мне очень помог. Я буду голосовать за ваш ответ полезным, как только у меня хватит репутации! :) – s106mo