Является ли 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 постоянное поколение не является частью кучи. Это другое пространство для определений классов и связанных данных, а также где живут интернированные строки.