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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Как профиль памяти в Java?
  • Есть ли простой способ получить все экземпляры объектов определенного classа в Java
  • Как анализировать память с помощью студии Android
  • Каков самый быстрый способ выбора элементов-потомков в jQuery?
  • Хороший профилер для Fortran и MPI
  • Beyond Stack Sampling: C ++ Profilers
  • Профилирование сайтов ASP.NET с помощью EQATEC Profiler
  • Сколько памяти использует объект C # / .NET?
  • Средство профилирования .NET Memory
  • Как я могу профилировать приложение для Android?
  • Захват времени выхода функции с помощью __gnu_mcount_nc
  • Interesting Posts

    У моей клавиатуры нет «мультимедийных» клавиш; Могу ли я управлять медиа без них?

    Дает ли длинный формат в Windows нуль-запись жесткого диска?

    Как переименовать несколько файлов в нескольких папках с помощью одной команды

    Как обрабатывать параметры URL-строки строки запроса GET в резервном компоненте на загрузке страницы?

    Соответствие Spotlight для Windows 7?

    Windows 7, определяющая местоположение установленной программы

    NHibernate ISUSE Flush: где и когда использовать его и почему?

    Scala currying vs частично примененные функции

    Возобновить rsync через SSH после разрыва соединения?

    Будет ли std :: string всегда заканчиваться на null в C ++ 11?

    Как сделать цвет шрифта значка на рабочем столе Windows 7 prof?

    Как я могу использовать транзакции в моей хранимой процедуре MySQL?

    Невозможно выполнить команду ping AWS EC2

    Spark 2.0 Dataset против DataFrame

    Каковы причины отказа ICMP на моем сервере?

    Давайте будем гением компьютера.