引用计数法

无法解决循环依赖问题

标记清除算法

解决循环依赖问题,而且不需要扫描所有对象

  • 标记:遍历所以Root对象
  • 清除:清除所有不可达的对象
  • GC Roots对象:正在执行的方法的参数、活动线程、类的静态字段、JNI引用

标记清除整理算法

基于标记清除算法,再加上碎片整理,移动对象需要时间

STW:Stop The World 清除大量对象,解决依赖关系不断变化的问题

标记复制算法

分代假设:绝大部分对象存活时间很短,存活时间较长的对象,可能存活更久
内存区划分为:年轻代、存活区、老年代

GC暂停时间

与堆内存大小和对象总数没直接关系,与存活对象数有直接影响

各垃圾回收器比较
image.png