Значение пространства PermGen

Каково значение пространства PermGen в Java?

29
задан Paul Bellora 27 March 2012 в 04:17
поделиться

4 ответа

Пространство PermGen зарезервировано для долгосрочных объектов - в основном Class объектов, загружаемых ClassLoader. PermGen не будет собираться в мусор, за исключением особых обстоятельств (в частности, когда ClassLoader, загрузивший эти классы, выходит из области видимости).

Это оптимизация сборки мусора - если объекты, которые, как мы ожидаем, не будут собираться, хранятся отдельно, это уплотняет пространство, где хранятся остальные объекты, что приводит к меньшей работе для сборщика мусора.

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

PermGen специфичен для виртуальных машин с генеративной сборкой мусора.

Если вы используете, скажем, JRockit, "значение PermGen" не существует, потому что в JRockit нет такого понятия.

Несколько лет назад, когда начали появляться странные ошибки "out of PermGen space", и никто еще не знал, чья это вина (Tomcat + Hibernate + Sun VM вызывали это), было принято заменять один из компонентов (сейчас проблемы понятны, но несколько лет назад, когда они начали появляться, вряд ли можно было найти какую-либо информацию об этом). Вы можете заменить Tomcat на Resin или Sun VM на JRockIt и т.д.

Я думаю, важно отметить, что PermGen не являются частью спецификаций Java и только деталью реализации (довольно) некоторых ВМ.

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

Единственное, что вам действительно нужно знать, это то, что пространство PermGen отделено от общей кучи и на него не влияет параметр -Xmx VM. Если у вас есть приложение, которое загружает много определений классов (например, сервер приложений или IDE), то вы можете установить размер пространства PermGen с помощью параметра -XX:MaxPermSize VM.

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

Постоянное поколение хранит мета-данные, описывающие пользовательские классы (классы, которые не являются частью языка Java).

Приложения с большой кодовой базой могут заполнить этот сегмент кучи, что приведет к java.lang.OutOfMemoryError: PermGen. На это не влияет параметр -Xmx или количество памяти на машине. Чтобы установить новый начальный размер, используйте -XX:PermSize=64m. Чтобы установить максимальный размер, используйте -XX:MaxPermSize=128m

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

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