前言

GC 垃圾回收有中算法,

  • 标记
  • 复制
  • 标记清除
  • 标记压缩

每种算法各有利弊,JVM 垃圾回收使用分代算法,不同年龄带使用不同算法

  • 年轻代:频繁发生GC,偶尔FGC
  • 老年代:Full GC,频率较低

标记

特点
每个对象都有一个引用计数器,每当对象被引用一次,计数器就+1,如果引用失效,则计数器-1,如果为0,则GC可以清理;
缺点
计数器维护麻烦!
循环引用无法处理!

GC常用算法

A、D 、F属于有效引用, B和G相互引用,无效引用,导致无法回收

复制算法

把原始数据复制一份,JVM年轻代使用是复制算法。

GC常用算法

年轻代GC后存活的对象,从Eden 和 From 区复制到 To 区。完成后,Fom 与To交换位置,To 又空了。经历一次GC后年龄+1,年轻代中经过15 GC后,仍然活着对像升级进入老年代

优点:没有标记和清除的过程!效率高!没有内存碎片!
缺点:需要浪费双倍的空间

标记清除算法

老年代使用,和标记压缩一起使用,节省空间

GC常用算法
优点:与复制比不需要额外空间
缺点:两次扫描,产生空间碎片

标记压缩

比标记清除多了一步,内存压缩

GC常用算法
没有内存碎片!但是耗时可能也较为严重

相关文章: