Область метода все еще присутствует в Java 8? - PullRequest
0 голосов
/ 03 мая 2018

До Java 8 у нас было 5 основных областей данных времени выполнения:

  1. Область метода
  2. Heap
  3. JVM Stacks
  4. Регистры ПК
  5. Стеки собственного метода

В Java 8 нет Perm Gen, то есть больше нет «Java.lang.OutOfMemoryError: PermGen»

это здорово, но я тоже читаю

Метод Area является частью пространства в Пермском поколении

но я не могу найти ничего, что явно говорит, что область Метода больше не в Java 8.

То же самое можно сказать о Пермском Гене и области Метода или только Пермском Генерале удалена и область метода все еще присутствует в старом поколении.

Приложите любой хороший исходный материал, который вы, возможно, видели в связи с Java 8 Memory Model

1 Ответ

0 голосов
/ 04 мая 2018

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

В отличие от Perm Gen, который содержал объекты Java и структуры данных JVM, отличные от объектов Java, структура памяти HotSpot JVM для Java 8 имеет четкое разделение. Old Gen все еще содержит только объекты Java, тогда как Metaspace содержит только данные, специфичные для JVM, и не содержит объектов Java. Поэтому объекты Java, ранее хранящиеся в Perm Gen, были перемещены в Old Gen. Поскольку область методов содержит артефакты «такие как пул констант во время выполнения, данные полей и методов, а также код для методов и конструкторов…», в ​​других слова не Java-объекты (пул может содержать ссылки на объекты кучи), теперь он является частью Metaspace.

Теперь вы можете обсудить, является ли Metaspace реализацией области метода или может содержать больше, чем область метода, но это не имеет практического значения. На практике JVM содержит код для управления Metaspace и содержащимися в нем артефактами, и ему не нужно заботиться о том, действительно ли эти артефакты относятся к тому, что в спецификации описывается как «Область метода» или нет.

...