Область метода и PermGen - PullRequest
17 голосов
/ 01 февраля 2012

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

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

Ответы [ 4 ]

17 голосов
/ 01 февраля 2012

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

На самом деле область Метода является частью Постоянного Поколения:

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

5 голосов
/ 01 февраля 2012

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

3 голосов
/ 06 июля 2013

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

1 голос
/ 31 марта 2015

http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/ дает довольно хорошую идею, которую я не нашел в другом месте.

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

...