Что такое "PermSize" в Java?
Я просматривал документ в Управление Памятью Java и в этом я наткнулся на PermSize, который я не мог понять. В документе говорится, что он хранит, "JVM хранит свои метаданные", но я не мог точно понять, что подразумевается под метаданными. Я гуглил, и где-то я читал, что он хранит объект value (определяемый пользователем объект).
какие объекты там хранятся? Пример с объяснением было бы здорово.
4 ответов:
краткое определение "постоянного поколения":
"постоянное поколение используется для держите отражающие данные самой виртуальной машины такие как объекты класса и метод объекты. Эти отражающие объекты являются выделено непосредственно в постоянный поколение, и оно определено размер независимо от других поколения."[ref]
другими словами, это то, где определения классов идут (и это объясняет, почему вы можете получить сообщение
OutOfMemoryError: PermGen spaceЕсли приложение загружает большое количество классов и/или на перевод).отметим, что
PermSizeявляется дополнительным к-Xmxзначение, заданное пользователем в параметрах JVM. НоMaxPermSizeпозволяет JVM быть в состоянии растиPermSizeна указанную сумму. Первоначально, когда виртуальная машина загружается,MaxPermSizeбудет значение по умолчанию (32 Мб для-clientи 64 Мб для-server) но на самом деле не будет занимать эту сумму, пока она не понадобится. С другой стороны, если вы должны были установить какPermSizeиMaxPermSizeдо 256 Мб, вы заметите, что общая куча увеличилась на 256 Мб дополнительно к-Xmxнастройка.
этот блог дает хорошее объяснение и предысторию. В принципе, " постоянное поколение "(размер которого задается PermSize) используется для хранения вещей, для которых JVM должен выделять пространство, но которые (обычно) не будут собираться в мусор (следовательно," постоянный") (+). Это означает, например, загруженные классы и статические поля.
есть еще и FAQ по сбору мусора непосредственно от Солнца, который отвечает на некоторые вопросы о постоянное поколение. Вот, наконец,блоге С большим количеством технических деталей.
(+) фактически части постоянного поколения будет быть GCed, например, объекты класса будут удалены при выгрузке класса. Но это было необычно, когда постоянное поколение было введено в JVM, отсюда и название.
пул permament содержит все, что не является вашими данными приложения, а скорее то, что требуется для виртуальной машины: обычно он содержит интернированные строки, байтовый код определенных классов, а также другие "не ваши" части данных.
кружева для хранения загруженного определения класса и метаданных. Если загружается большой проект на основе кода, недостаточный размер Пермского поколения вызовет популярную Java.Ленг.OutOfMemoryError: PermGen.
Comments