- 内存区域的结构是否取决于JVM的实现?
绝对。PermGen或metaspace只是特定JVM的实现细节。以下答案是有关HotSpot JVM(Java SE虚拟机的参考实现)的。
- java8 +中堆包括哪些区域?
由于上述原因,说“在JDK 8中”而不是“在Java 8中”会更正确。
Java Heap的结构取决于所选的GC算法。例如,使用并行GC和CMS,堆分为老一代和年轻一代,后者由伊甸园和两个幸存者空间组成。
G1堆分为相同大小的区域。Epsilon GC堆是单个整体区域。等等。
- 静态方法和变量在java8和java8 +之前存储的位置?
方法(静态和非静态)都驻留在JDK 8中的metaspace或JDK 8之前的PermGen中。不确定“变量”是什么意思:字段值在Java
Heap中,而字段元数据(名称,类型,偏移量)在元空间中。
- 除了类元数据信息外,metaSpace是否存储任何其他内容?
以下各项存储在metaspace中:
- 类(内部表示)
- 符号(名称和签名)
- 基本数组(例如,字段元数据表示为无符号短裤数组)
- 方法及其字节码
- 方法计数器
- 常量池和CP缓存
- 注解
所有这些都可以视为“类元数据”。



