Что на самом деле означает PermGen?
Вопрос
Я знаю, что такое PermGen, для чего он используется, почему он выходит из строя, как его увеличить и т.д.
Чего я не знаю, так это того, что на самом деле означает PermGen.Постоянный...Gen...что-то?
Кто-нибудь знает, что на самом деле означает PermGen?
Решение
Постоянное поколение. Детали, конечно, зависят от реализации.
Вкратце, он содержит объекты Java, связанные с классами и интернированными строками. В клиентской реализации Sun с включенным совместным использованием classes.jsa
отображена в памяти для формирования начальных данных, причем примерно половина из них предназначена только для чтения и наполовину копируется при записи.
Java-объекты, которые являются просто старыми, хранятся в поколении Tenured.
Другие советы
PermGen используется JVM для хранения загруженных классов.Вы можете увеличить его с помощью:
-XX:MaxPermSize=384m
если вы используете Sun JVM или OpenJDK.
Итак, если вы получите исключение OutOfMemoryException:PermGen вам нужно либо увеличить PermGen, либо у вас могут возникнуть проблемы с загрузчиком классов.
Постоянное поколение. См. руководство по настройке ГХ в java . на сборщик мусора.
Не совсем соответствует исходному вопросу, но может кто-то найдет его полезным. PermGen - это область памяти, в которой Java хранит свои классы. Итак, многие из нас сталкивались с OOM в PermGen, если было, например, много классов.
Начиная с Java 8, область PermGen была заменена областью MetaSpace, которая более эффективна и не ограничена по умолчанию (или, точнее, ограничена объемом встроенной памяти, в зависимости от 32 или 64-битной jvm и доступности виртуальной памяти ОС) , Однако можно настроить его несколькими способами, например, указав максимальный предел для области. Вы можете найти более полезную информацию в этом сообщении в блоге .
PermGen расшифровывается как Постоянное поколение .
Вот краткое описание в DDJ
Если я правильно помню, gen обозначает поколение, как в сборщике мусора поколений (который обрабатывает более молодые объекты, чем объекты среднего возраста и «постоянные» объекты). Принцип локальности предполагает, что недавно созданные объекты будут уничтожены первыми.
Permgen означает постоянное поколение. Это одна из областей памяти JVM. Это часть кучи с фиксированным размером с использованием флага MaxPermSize.
Почему название " PermGen "
Этот permgen был назван в первые дни Java. Сеть Permgen хранит все метаданные загруженных классов. Но проблема в том, что после загрузки класса он останется в JVM до завершения работы JVM. Так что имя Permgen выбрано для этого. Но позже появилась динамическая загрузка классов, но имя не изменилось. Но с Java 8 они также решили эту проблему. Теперь permagen был переименован в MetaSpace с динамическим объемом памяти.