Зависит ли структура областей памяти от реализации JVM?
Абсолютно.PermGen или Metaspace - это просто детали реализации конкретной JVM.Следующие ответы касаются HotSpot JVM, эталонной реализации виртуальной машины Java SE.
- Какие области включает куча в java8 +?
По вышеуказанной причине правильнее было бы сказать «в JDK 8», а не «в Java 8».
Структура Java Heap зависит от выбранного алгоритма GC.Например, с помощью Parallel GC и CMS куча делится на старое и молодое поколения, где последнее состоит из рая и двух пространств выживших.
Куча G1 делится на области одинакового размера.Куча Epsilon GC представляет собой единый монолитный участок.И так далее.
Где статические методы и переменные хранятся до java8 и java8 +?
Методы (как статические, так и нестатические) находятся в Metaspace в JDK 8 или в PermGen до JDK 8Не уверен, что вы подразумеваете под «переменными»: значения полей находятся в Java Heap, метаданные полей (имена, типы, смещения) находятся в Metaspace.
Хранит ли MetaSpace что-либо, кроме информации метаданных класса?
В Metaspace хранятся следующие элементы:
- Классы (их внутреннее представление)
- Символы (имена и подписи)
- Примитивные массивы (например, метаданные поля представляются в виде массива беззнаковых шорт)
- Методы и их байт-коды
- Методсчетчики
- Пулы констант и кэши CP
- Аннотации
Все это можно считать "метаданными класса".