Область метода и PermGen

Я пытался понять структуру памяти HotSpot JVM и запутался с двумя терминами: «Область метода» и «PermGen» пространство. В документах, на которые я ссылался, говорится, что область метода содержит определение классов и методов, включая байтовый код. В некоторых других документах говорится, что они хранятся в пространстве PermGen.

Итак, могу ли я сделать вывод, что эти две области памяти одинаковы?


person Ratheesh P Kumar    schedule 01.02.2012    source источник
comment
Обновление: из java8 на словах нет PermGen, и все классы, методы, стринги хранятся в Metaspace. Ссылка: karunsubramanian.com/websphere/ < / а>   -  person Ramesh Papaganti    schedule 12.01.2018


Ответы (4)


Вам следует взглянуть на типы памяти Java и, при необходимости, на этот документ об сборке мусора в Java. Последнее очень многословно, и оба они полезны.

Фактически область метода является частью постоянного поколения:

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

person xea    schedule 01.02.2012

Вы можете рассматривать «Область методов» как подмножество «PermGen», поскольку постоянное пространство генерации действительно содержит определения классов, но также содержит интернированные строки и другие биты данных, которые вряд ли когда-либо будут отброшены.

person Ernest Friedman-Hill    schedule 01.02.2012
comment
Но это не только подмножество PermGen, область метода может быть вне пространства PermGen, верно? - person falsarella; 01.02.2012
comment
Нет, насколько я понимаю, все подобные данные хранятся в PermGen. - person Ernest Friedman-Hill; 01.02.2012
comment
Обновление: интернированные строки хранятся в основной куче начиная с Java 7. oracle.com/technetwork/java/javase/ - person Rasika Perera; 21.09.2014

Область метода - это в основном пространство без кучи, такое как Stack, которое хранит скелет класса. скелет включает статические переменные со значениями, конструкторами и т. д. Операция отражения выполняется в этой области памяти. Perm - это пространство памяти, параллельное куче, в котором хранится двоичный код текущего исполняемого класса.

person Pinkesh Sharma    schedule 06.07.2013

дает довольно хорошее представление, которое я больше нигде не нашел

Большинство людей называют Heap и Stack эквивалентами и основными компонентами, но Тай дает идеальное объяснение с превосходными изображениями.

Изменить: ссылка больше не работает :(

person killjoy    schedule 31.03.2015