Что такое "PermSize" в Java?



Я просматривал документ в Управление Памятью Java и в этом я наткнулся на PermSize, который я не мог понять. В документе говорится, что он хранит, "JVM хранит свои метаданные", но я не мог точно понять, что подразумевается под метаданными. Я гуглил, и где-то я читал, что он хранит объект value (определяемый пользователем объект).



какие объекты там хранятся? Пример с объяснением было бы здорово.

731   4  

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

    Ничего не найдено.