Что на самом деле означает PermGen?

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

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

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

8 ответов


Постоянной Генерации. Детали, конечно, конкретны.

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

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


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

-XX:MaxPermSize=384m

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

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


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


не очень связанный матч с оригинальным вопросом, но может быть кто-то найдет его полезным. PermGen действительно является областью памяти, где Java использовала свои классы. Так, многие из нас сталкивался с нехваткой памяти в PermGen, если там были, например много классов.

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


PermGen означает Постоянный.

вот краткое объявление на DDJ



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


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

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

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