Подтвердить что ты не робот

PermGen и куча, различие и их значение

Друзья,

Не могли бы вы дать мне значимость, разницу и использование для Кучи и Пермигена. Также было бы хорошо знать, какой класс загружен в них соответственно.

Объяснение, связанное с спецификацией Java VM, было бы действительно полезно

Спасибо Punith

4b9b3361

Ответ 1

Память (куча) управляется в поколениях или пулах памяти, в которых хранятся объекты разного возраста. Сбор мусора происходит в каждом поколении, когда поколение заполняется. Объекты выделяются в поколении для более молодых объектов или young generation, а из-за младенческой смертности большинство объектов умирают там.

Когда какой-либо новый объект строится, он переходит в пространство Эдена, которое является частью young generation.

Если объект все еще жив через некоторое время, он переходит к tenured generation, где лежат объекты с длительным проживанием.

Если объект должен жить до завершения процесса, объект перемещается в Perm Generation. Java classes сохраняются в постоянном поколении.

Ответ 3

Ну, я не эксперт, но память PermGem находится внутри кучи, так как это особое место, где все классы загружаются во время выполнения. Поэтому, если у вас слишком много классов, PermGem генерирует исключение OutOfMemoryException. И хорошо куча хранит объекты, которые вы инициируете в своем java-коде, где GC собирает объекты, на которые не ссылается какая-либо переменная в текущем потоке в стеке.

Ответ 4

Я считаю, что Permgen - это область памяти внутри памяти кучи. Он создан для специального назначения, например, для String.

Весь созданный объект не получает память Permgen. Только для специальной кластеризации, такой как String, в JDK 6 или ниже.

В современных версиях JDK, таких как 8 и выше, Pergen не найден, однако появилась новая память, например Non Heap, и другие различные кэш-память.

Ответ 5

У меня были такие же сомнения относительно деталей PermGen и других частей памяти. После выполнения какого-то поиска, вот что я наконец сделал.

Java HotSpot VM нуждается в памяти, которую он получает от операционной системы, эта память называется памятью кучи. Теперь память кучи, известная тем, что хранит объекты, содержит и другие важные вещи.

Короткие живые объекты Java-объекты хранятся в молодом поколении, и если эти объекты по-прежнему необходимы для дальнейшего выполнения, то они переносятся на срок службы/старое поколение. И в зависимости от типа Generation Garbage Collector, память очищается.

Как насчет постоянного поколения (PermGen)? Java HotSpot VM загружает структуру классов/классов в PermGen, которая используется JVM для хранения загруженных классов и других метаданных. PermGen не используется для хранения объектов.

Помимо объектов и структуры классов, сам код JVM загружает код агента и данные профайлера и т.д.

Таким образом, в основном, структура heap = object + class + JVM.

Ссылки: Java Docs, Руководство по Java GC