Что на самом деле означает PermGen? - PullRequest
117 голосов
/ 26 ноября 2008

Я знаю, что такое PermGen, для чего он используется, почему он не работает, как его увеличить и т. Д.

Что я не знаю, так это то, что на самом деле означает PermGen. Постоянный ... Gen ... что-то?

Кто-нибудь знает, что на самом деле означает PermGen?

Ответы [ 8 ]

81 голосов
/ 26 ноября 2008

Постоянное поколение. Детали, конечно, зависят от реализации.

Вкратце, он содержит объекты Java, связанные с классами и интернированными строками. В клиентской реализации Sun с включенным общим доступом classes.jsa - это отображаемая память для формирования начальных данных, с половиной только для чтения и наполовину для копирования при записи.

Java-объекты, которые являются просто старыми, хранятся в поколении Tenured.

58 голосов
/ 26 ноября 2008

PermGen используется JVM для хранения загруженных классов. Вы можете увеличить его, используя:

-XX:MaxPermSize=384m

если вы используете Sun JVM или OpenJDK.

Так что если вы получаете OutOfMemoryException: PermGen, вам нужно либо увеличить PermGen, либо у вас могут возникнуть проблемы с загрузчиком классов.

20 голосов
/ 26 ноября 2008

Постоянное поколение. См. Руководство по настройке java GC для получения дополнительной информации о сборщике мусора.

8 голосов
/ 17 июня 2014

Не совсем соответствует исходному вопросу, но, возможно, кто-то найдет его полезным. PermGen - это область памяти, в которой Java хранит свои классы. Итак, многие из нас сталкивались с OOM в PermGen, если было, например, много классов.

Начиная с Java 8, область PermGen была заменена областью MetaSpace, которая более эффективна и не ограничена по умолчанию (или, точнее, ограничена объемом встроенной памяти, в зависимости от 32 или 64-битной jvm и доступности виртуальной памяти ОС) , Однако можно настроить его несколькими способами, например, указав максимальный предел для области. Вы можете найти более полезную информацию в этом блоге .

6 голосов
/ 26 ноября 2008

PermGen означает Постоянное поколение .

Вот краткое сообщение о DDJ

3 голосов
/ 26 ноября 2008

Если я правильно помню, gen обозначает поколение, как в сборщике мусора поколений (который обрабатывает младшие объекты иначе, чем объекты среднего возраста и «постоянные» объекты). Принцип локальности предполагает, что недавно созданные объекты будут уничтожены первыми.

3 голосов
/ 26 ноября 2008
1 голос
/ 12 августа 2018

Permgen означает постоянное поколение. Это одна из областей памяти JVM. Это часть кучи с фиксированным размером, используя флаг MaxPermSize.

Почему название "PermGen"?

Этот permgen был назван в первые дни Java. Сеть Permgen хранит все метаданные загруженных классов. Но проблема в том, что после загрузки класса он останется в JVM до завершения работы JVM. Так что имя Permgen выбрано для этого. Но позже появилась динамическая загрузка классов, но имя не изменилось. Но с Java 8 они также решили эту проблему. Теперь permagen был переименован в MetaSpace с динамическим объемом памяти.

...