Является ли java PermGen пространственной частью общей памяти VM?

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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