JVM虚拟机(中)--堆,GC机制
内容承接上节,上节说到了虚拟机栈,本地方法栈及程序计数器及类的加载等相关内容,这节聊聊上节没提到的元空间,堆及堆上的GC机制,GC的算法将在下节继续说明. java 创建的对象大部分都在堆上存储 ,是GC操作的主体.那么堆在内存如何分配的呢?如下图: 首先堆上分为新生代和老年代,新生代又分为Eden区,From Survivor 区及To Survivor区,新生代上发生的GC叫做Minor GC,老年代发生的GC叫做Major GC或者Full GC. Minor GC速度较快,比较频繁,Major GC/Full GC则速度较慢,是Minor GC 的十分之一以下,一般来说,发生Major GC/Full GC时会伴随至少一次Minor GC. 在谈GC之前,先说说新生代与老年代,新生代中Eden,From Survivor及To Survivor之间的联系.以及触发GC的条件. Eden 区,java生成的对象一开始 大多数 (特例后文会讲)都在Eden区,当Eden区中的对象占用空间越来越大时,会触发Minor GC,此时在Eden区的对象如果是可回收的(下文会对可回收判断逻辑进行解释)则直接回收,而不可回收的部分会被放入From Survivor区. From Survivor区与To Survivor区 ,发送GC时,From Survivor区中的数据