[Хорошее описание] [1] от парня, который много знает о внутреннем устройстве GC. Кстати, в его блоге есть много полезной информации, связанной с GC. [1]: blogs.oracle.com/jonthecollector/entry/…
Иван Дубров,
Ответы:
84
Постоянное поколение. Детали, конечно, зависят от конкретной реализации.
Вкратце, он содержит объекты Java, связанные с классами и интернированными строками. В клиентской реализации Sun с включенным совместным использованием classes.jsaпамять отображается для формирования исходных данных, причем половина из них предназначена только для чтения, а половина - для копирования при записи.
Просто старые объекты Java сохраняются в Tenured Generation.
PermGen используется JVM для хранения загруженных классов. Вы можете увеличить его, используя:
-XX:MaxPermSize=384m
если вы используете Sun JVM или OpenJDK.
Поэтому, если вы получаете OutOfMemoryException: PermGen, вам нужно либо увеличить PermGen, либо у вас могут возникнуть проблемы с загрузчиком классов.
Какой ответ был принят на момент публикации этого комментария? В настоящее время принятый ответ (на этот раз от "Tom Hawtin - tackline") мне кажется точным. Может быть имеет смысл отредактировать свой комментарий, чтобы он не заставил людей не доверять текущему принятому ответу?
jbyler
20
Постоянное поколение. См. Руководство по настройке java GC для получения дополнительных сведений о сборщике мусора.
Не совсем соответствует исходному вопросу, но, возможно, кому-то это пригодится. PermGen - это действительно область памяти, где Java хранила свои классы. Итак, многие из нас встречали OOM в PermGen, если бы классов было, например, много.
Начиная с Java 8, область PermGen была заменена областью MetaSpace, которая более эффективна и по умолчанию не ограничена (или, точнее, ограничена объемом собственной памяти, в зависимости от 32- или 64-разрядной виртуальной памяти jvm и ОС). Однако можно настроить его некоторыми способами, например, указав максимальный предел для области. Вы можете найти более полезную информацию в этом сообщении блога .
Если я правильно помню, gen означает поколение, как в сборщике мусора поколений (который обрабатывает более молодые объекты иначе, чем объекты среднего возраста и «постоянные» объекты). Принцип локальности предполагает, что в первую очередь будут уничтожены недавно созданные объекты.
Пермген означает «постоянное поколение». Это одна из областей памяти JVM. Это часть кучи с фиксированным размером с помощью флага MaxPermSize.
Почему название «ПермГен»?
Этот перманент был назван на заре Java. Сеть Permgen хранит все метаданные загруженных классов. Но проблема в том, что как только класс загружен, он останется в JVM до выключения JVM. Так что имя permgen - это выбор для этого. Но позже появилась динамическая загрузка классов, но название не изменилось. Но в Java 8 они решили и эту проблему. Теперь пермаген был переименован в MetaSpace с динамическим размером памяти.
Ответы:
Постоянное поколение. Детали, конечно, зависят от конкретной реализации.
Вкратце, он содержит объекты Java, связанные с классами и интернированными строками. В клиентской реализации Sun с включенным совместным использованием
classes.jsa
память отображается для формирования исходных данных, причем половина из них предназначена только для чтения, а половина - для копирования при записи.Просто старые объекты Java сохраняются в Tenured Generation.
источник
PermGen используется JVM для хранения загруженных классов. Вы можете увеличить его, используя:
-XX:MaxPermSize=384m
если вы используете Sun JVM или OpenJDK.
Поэтому, если вы получаете OutOfMemoryException: PermGen, вам нужно либо увеличить PermGen, либо у вас могут возникнуть проблемы с загрузчиком классов.
источник
Постоянное поколение. См. Руководство по настройке java GC для получения дополнительных сведений о сборщике мусора.
источник
Не совсем соответствует исходному вопросу, но, возможно, кому-то это пригодится. PermGen - это действительно область памяти, где Java хранила свои классы. Итак, многие из нас встречали OOM в PermGen, если бы классов было, например, много.
Начиная с Java 8, область PermGen была заменена областью MetaSpace, которая более эффективна и по умолчанию не ограничена (или, точнее, ограничена объемом собственной памяти, в зависимости от 32- или 64-разрядной виртуальной памяти jvm и ОС). Однако можно настроить его некоторыми способами, например, указав максимальный предел для области. Вы можете найти более полезную информацию в этом сообщении блога .
источник
PermGen означает постоянное поколение .
Вот краткая аннотация DDJ
источник
Постоянное поколение
источник
Если я правильно помню, gen означает поколение, как в сборщике мусора поколений (который обрабатывает более молодые объекты иначе, чем объекты среднего возраста и «постоянные» объекты). Принцип локальности предполагает, что в первую очередь будут уничтожены недавно созданные объекты.
источник
Пермген означает «постоянное поколение». Это одна из областей памяти JVM. Это часть кучи с фиксированным размером с помощью флага MaxPermSize.
Почему название «ПермГен»?
Этот перманент был назван на заре Java. Сеть Permgen хранит все метаданные загруженных классов. Но проблема в том, что как только класс загружен, он останется в JVM до выключения JVM. Так что имя permgen - это выбор для этого. Но позже появилась динамическая загрузка классов, но название не изменилось. Но в Java 8 они решили и эту проблему. Теперь пермаген был переименован в MetaSpace с динамическим размером памяти.
источник