+-
Java 8中的Java内存区域
我已经阅读了很多关于 java内存区域的内容,但看起来它只是一团糟.主要是由于在java8中引入了新的MetaSpace区域而不是PermGen.现在有问题:

>堆在java8中包含哪些区域?
>在java8和java8之前存储静态方法和变量的位置?
> MetaSpace是否存储除类元数据信息之外的任何内容?
>内存区域的结构是否依赖于JVM的实现?

谢谢您的回答.

最佳答案
Does the structure of memory areas depend on the implementation of JVM ?

绝对. PermGen或Metaspace只是特定JVM的实现细节.以下答案是关于HotSpot JVM,Java SE虚拟机的参考实现.

What areas does the heap include in java8+ ?

由于上述原因,说“在JDK 8中”而不是“在Java 8中”更为正确.

Java Heap的结构取决于所选的GC算法.例如.通过并行GC和CMS,堆分为Old和Young代,后者由Eden和两个Survivor Spaces组成.

G1堆分为相同大小的区域. Epsilon GC堆是一个单一的整体区域.等等.

Where the static methods and variables are stored before java8 and java8+ ?

方法(静态和非静态)驻留在JDK 8中的Metaspace或JDK 8之前的PermGen中.不确定“变量”的含义:字段值在Java堆中,字段元数据(名称,类型,偏移)在Metaspace.

Does the MetaSpace store anything except class meta-data info ?

以下项目存储在Metaspace中:

>类(内部表示)
>符号(名称和签名)
>原始数组(例如,字段元数据表示为无符号短路数组)
>方法及其字节码
>方法计数器
>常量池和CP缓存
>注释

所有这些都可以被视为“类元数据”.

点击查看更多相关文章

转载注明原文:Java 8中的Java内存区域 - 乐贴网