MinorGC
MinorGC算法
- MinorGC采用复制算法
MinorGC过程
- 复制 > 清空 > 互换
1、将 Eden、 ServivorFrom 复制到 Servivor To, 年龄+1
- 首先把Eden和ServivorFrom区域存活的对象复制ServivorTo区域
- 对象年龄+1
- 如果年龄达到老年标准(默认15),则直接复制到老年代区
- 如果ServivorTo空间不足,则复制到老年代区
2、清空 Eden 和 ServivorFrom
- 清空Eden 和ServivorFrom中的对象
3、ServivorFrom 和 ServivorTo 互换
- ServivorFrom 和 ServivorTo互换
- ServivorTo成为下次MinorGC的ServivorFrom区
MajorGC
MajorGC算法
- MajorGC采用标记清除算法
MajorGC过程
- 扫描一次所有老年代
- 标记出存活的对象
- 回收没有标记的对象
- 由于要扫描再回收,因此MajorGC耗时较长
(MajorGC 会产生内存碎片,为了减少内存损耗,我们一般需要进行合并或者标记出来方便下次直接分配。当老年代也满了装不下的时候,就会抛出 OOM异常。)