Является ли пространство Java PermGen частью общей памяти виртуальной машины? - PullRequest
12 голосов
/ 19 ноября 2010

Предполагая, что я запускаю свою Java-ВМ со следующими параметрами:

-Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m

Сделать 512-метровое пространство PermGen добавить в память 1024 м или они часть ее ?Или, другими словами, у меня общее потребление памяти 1536 м или 1024 м?В последнем случае, означает ли это, что приложение имеет только 512 м для целей, отличных от пространства PermGen?

Пожалуйста, дайте мне знать, если этот вопрос показывает отсутствие понимания пространства PermGen.; -)

Ответы [ 3 ]

16 голосов
/ 19 ноября 2010

Параметры -Xms и -Xmx относятся к heap памяти, тогда как пространство PermGen представляет собой отдельный пул памяти.

Другими словами, общий объем памяти, доступный вашемуJava-приложение будет иметь размер 1,5 ГБ, а не 1 ГБ, и вы получите полный гигабайт пространства для объектов, выделенных в куче.

1 голос
/ 04 августа 2017

Я только что наткнулся на эту страницу через Google.Это определенная путаница, является ли PerGen частью кучи или нет: ответ таков: «Куча разбивается на более мелкие части / поколения, и это следующие части: молодое поколение, старое или постоянное поколение и постоянное поколение».Это то, что Oracle говорит, мягко говоря.Гораздо разумнее придерживаться того, что говорит создатель, чем аудиторией в веб-домене.

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

0 голосов
/ 30 июля 2013

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

...