Java 内存区域 java 8
Java memory areas in java 8
我已经阅读了很多关于 java 内存区域的内容,但看起来它只是一团糟。主要是由于在 java8 中引入了新的 MetaSpace
区域而不是 PermGen
。现在还有问题:
heap
在java8+中包括哪些领域?
static
方法和变量存储在 java8 和 java8+ 之前的位置?
MetaSpace
是否存储除 class 元数据信息之外的任何内容?
- 内存区域的结构是否依赖于
JVM
的实现?
感谢您的回答。
- Does the structure of memory areas depend on the implementation of JVM ?
当然可以。 PermGen 或 Metaspace 只是特定 JVM 的实现细节。以下回答都是关于HotSpot JVM,JavaSE虚拟机的参考实现。
- What areas does the heap include in java8+ ?
出于上述原因,说 "in JDK 8" 比 "in Java 8" 更正确。
Java 堆的结构取决于所选的 GC 算法。例如。使用 Parallel GC 和 CMS,堆被分为老年代和年轻代,后者由 Eden 和两个 Survivor Spaces 组成。
G1 Heap被划分为相同大小的区域。 Epsilon GC 堆是一个整体区域。等等。
- Where the static methods and variables are stored before java8 and java8+ ?
方法(静态和非静态)驻留在 JDK 8 中的 Metaspace 中或 JDK 8 之前的 PermGen 中。不确定 "variables" 是什么意思:字段值在 Java 堆中,字段元数据(名称、类型、偏移量)在元空间中。
- Does the MetaSpace store anything except class meta-data info ?
以下项目存储在元空间中:
- 类(他们的内部表示)
- 符号(姓名和签名)
- 原始数组(例如,字段元数据表示为无符号短数组)
- 方法及其字节码
- 方法计数器
- 常量池和 CP 缓存
- 注释
这些都可以考虑"class metadata"。
我已经阅读了很多关于 java 内存区域的内容,但看起来它只是一团糟。主要是由于在 java8 中引入了新的 MetaSpace
区域而不是 PermGen
。现在还有问题:
heap
在java8+中包括哪些领域?static
方法和变量存储在 java8 和 java8+ 之前的位置?MetaSpace
是否存储除 class 元数据信息之外的任何内容?- 内存区域的结构是否依赖于
JVM
的实现?
感谢您的回答。
- Does the structure of memory areas depend on the implementation of JVM ?
当然可以。 PermGen 或 Metaspace 只是特定 JVM 的实现细节。以下回答都是关于HotSpot JVM,JavaSE虚拟机的参考实现。
- What areas does the heap include in java8+ ?
出于上述原因,说 "in JDK 8" 比 "in Java 8" 更正确。
Java 堆的结构取决于所选的 GC 算法。例如。使用 Parallel GC 和 CMS,堆被分为老年代和年轻代,后者由 Eden 和两个 Survivor Spaces 组成。
G1 Heap被划分为相同大小的区域。 Epsilon GC 堆是一个整体区域。等等。
- Where the static methods and variables are stored before java8 and java8+ ?
方法(静态和非静态)驻留在 JDK 8 中的 Metaspace 中或 JDK 8 之前的 PermGen 中。不确定 "variables" 是什么意思:字段值在 Java 堆中,字段元数据(名称、类型、偏移量)在元空间中。
- Does the MetaSpace store anything except class meta-data info ?
以下项目存储在元空间中:
- 类(他们的内部表示)
- 符号(姓名和签名)
- 原始数组(例如,字段元数据表示为无符号短数组)
- 方法及其字节码
- 方法计数器
- 常量池和 CP 缓存
- 注释
这些都可以考虑"class metadata"。