Что действительно означает PermGen?

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

Я не знаю, что означает PermGen. Постоянный... Генерал... что-то?

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

Ответ 1

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

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

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

Ответ 2

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

-XX:MaxPermSize=384m

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

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

Ответ 5

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

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

Ответ 7

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