Что такое перманентное пространство?

Изучая профилирование java-памяти, я продолжаю видеть термин "perm space" в дополнение к "куче". Я знаю, что такое куча - какое пространство perm?

Ответ 1

Это означает постоянное поколение:

Постоянное поколение потому что он содержит метаданные, описывающие классы пользователей (классы, которые не являются часть языка Java). Примеры таких метаданных являются объектами описание классов и методов и они хранятся в Постоянном Поколение. Приложения с большими база кода может быстро заполнить эту сегмент кучи, который вызовет java.lang.OutOfMemoryError: PermGen no как высоко ваш -Xmx и сколько памяти, которые у вас есть на машине.

Ответ 2

Perm space используется для хранения информации для загруженных классов и нескольких других дополнительных функций, таких как String Pool (для высоко оптимизированного тестирования равенства строк), которые обычно создаются методами String.intern(). По мере того, как ваше приложение (количество классов) будет расти, это пространство должно быть заполнено быстро, так как сборка мусора на этом Пространстве не очень эффективна для очистки по мере необходимости, вы быстро получаете память из памяти: perm gen space error. После этого никакая заявка не будет работать на этой машине эффективно даже после огромной пустой JVM.

Перед запуском приложения вы должны java -XX:MaxPermSize избавиться от этой ошибки.

Ответ 3

Простой (и упрощенный) ответ: он, где jvm хранит свои собственные бухгалтерские данные, в отличие от ваших данных.

Ответ 4

Perm Gen означает постоянное поколение, которое содержит метаданные о классах.

  • Предположим, что если вы создадите имя класса A, переменная экземпляра будет сохранена в кучной памяти, а класс A вместе со статическими загрузчиками классов будет сохранен в постоянном поколении.
  • Сборщикам мусора будет трудно очистить или освободить пространство памяти, хранящееся в памяти постоянного поколения. Следовательно, всегда рекомендуется сохранить параметры памяти пермг до рекомендуемого предела.
  • JAVA8 представила концепцию, называемую генерацией метапространства, поэтому для использования версий jdk 1.8 больше не требуется.

Ответ 5

Предельное пространство - это область кучи, которая содержит все отражающие данные самой виртуальной машины, такие как объекты класса и метода.

Ответ 6

Он содержит такие вещи, как определения классов, пул строк и т.д. Я думаю, вы могли бы назвать его метаданными.

Ответ 7

PermGen Space означает выделение памяти для постоянного поколения. Все неизменные объекты Java относятся к этой категории, например String, которая создается с помощью литералов или с помощью методов String.intern() и для загрузки классов в память. PermGen Space ускоряет поиск по строкам.

Ответ 8

Что существует в PremGen: Class Area входит в зону PremGen. Статические поля также разрабатываются при загрузке классов, поэтому они также существуют в PremGen. Здесь хранится область с постоянным пулом, имеющая все неизменяемые поля, которые объединены как String. В дополнение к этому, также хранятся данные класса, загруженные загрузчиками классов, массивы объектов, внутренние объекты, используемые jvm.

Ответ 9

Область Permgen всегда известна как область метода. Когда подсистема classloader загрузит файл класса (байтовый код) в область метода (permGen). Он содержит все метаданные класса, например: Полноценное имя вашего класса, Полностью квалифицированное имя ближайшего родительского класса, информация о переменной, информация о конструкторе, постоянный пул и т.д.