11.新生代
新生代是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、ServivorTo 三个区。
- Eden 区
Java 新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当 Eden 区内存不够的时候就会触发 MinorGC,对新生代区进行一次垃圾回收。 - ServivorFrom
上一次 GC 的幸存者,作为这一次 GC 的被扫描者。 - ServivorTo
保留了一次 MinorGC 过程中的幸存者。 - MinorGC 的过程(复制->清空->互换)
MinorGC 采用复制算法。- eden、servicorFrom 复制到 ServicorTo,年龄+1
首先,把 Eden 和 ServivorFrom 区域中存活的对象复制到 ServicorTo 区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果 ServicorTo 不够位置了就放到老年区); - 清空 eden、servicorFrom
然后,清空 Eden 和 ServicorFrom 中的对象; - ServicorTo 和 ServicorFrom 互换
最后,ServicorTo 和 ServicorFrom 互换,原 ServicorTo 成为下一次 GC 时的 ServicorFrom区。
- eden、servicorFrom 复制到 ServicorTo,年龄+1