Быстрое определение «постоянного поколения»:
«Постоянное поколение используется для держать отражающие данные самой VM , такие как объекты класса и метода объектов Эти отражающие объекты . выделяется непосредственно в постоянное поколение , и размер его составляет независимо от других поколений ». [ref]
Другими словами, это где идут определения класса (и это объясняет, почему вы можете получить сообщение OutOfMemoryError: PermGen space
если приложение загружает большое количество классов и/или на перераспределении).
Обратите внимание, что PermSize
дополнительное к значению -Xmx
, установленного пользователем на параметры виртуальной машины Java. Но MaxPermSize
позволяет JVM иметь возможность выращивать PermSize
на указанную сумму. Первоначально, когда загружается виртуальная машина, MaxPermSize
по-прежнему будет значением по умолчанию (32 МБ для -client
и 64 МБ для -server
), но на самом деле не будет занимать эту сумму до тех пор, пока она не понадобится. С другой стороны, если вы установите ОБА PermSize
и MaxPermSize
до 256mb, то можно заметить, что общая куча увеличилась на 256mb дополнительной к установке по -Xmx
.
Значение по умолчанию - 64 м для 64-разрядных виртуальных машин. Мы увеличили его до «512 м» для сервера tomcat, на котором запущено 8 рельсовых приложений.'-XX: MaxPermSize = 512m -XX: PermSize = 512m'. Tomcat с множеством определений классов сам по себе нуждается в большом PerSize и с рубином, рубином на рельсах в сочетании с jruby .. огромным PermSize. –
Обратите внимание, что постоянное поколение (и с ним параметры PermSize) уходят в Java 8. Они заменяются «Metaspace». См. Http://javaeesupportpatterns.blogspot.co.uk/2013/02/java-8-from-permgen-to-metaspace.html – sleske