【JVM虚拟机篇03】Heap

24 阅读1分钟

Java堆

线程共享的区域:主要用来保存对象实例或者数组等,当堆中没有内存空间可分配给实例,也无法再扩展,则抛出OOM异常

JDK8

image.png

年轻代:被分为三部分,Eden区和两个大小严格相同的Survivor区,根据JVM策略,在经过几次垃圾收集后,任然存活的于Survivor的对象将被移动到老年代区间

老年代主要保存生命周期长的对象,一般是一些老的对象

元空间保存的类信息、静态变量、常量、编译后的代码

JDK7

image.png

JDK8 将方法区/永久代 移除堆空间的原因

方法区/永久代存放的是类信息、常量信息等,当类动态生成或者加载时,内存大小不好控制,为了防止内存溢出,放到了本地内存中。