标记—清除算法(Mark-Sweep)
- 标记需要回收/不需要回收的对象
- 清除需要回收的对象
缺点:
- 效率不稳定,需要标记太多待回收对象
- 空间碎片化,产生大量碎片空间
标记—复制算法
Appel式回收——HotSpot虚拟机的Serial、ParNew、Parallel Scavenge等新生代收集器策略。新生代划分为伊甸园(Eden)空间和两块较小的Survivor空间,默认Eden和Survivor大小比例为8:1。
- 每次分配内存,只使用Eden和一块Survivor(from)
- 回收空间时,将Eden和Survivor(from)中存活的对象复制到另外一块Survivor(to)中
- 清空Eden和Survivor(from)中未存活的对象
- 下一次分配时,两块Survivor(to)和Survivor(from)角色互换,Survivor(to)变为Survivor(from),与Eden一起接受新分配的对象
- “逃生门”设计——分配担保机制,如果Survivor(to)空间不足以容纳存活的对象,那么存活对象直接进入老年代
注意:Appel式回收在HotSpot虚拟机的Serial、ParNew、Parallel Scavenge等新生代收集器中使用,不同的虚拟机,不同的垃圾回收器使用的策略不同,例如G1收集器就有了颠覆性的算法改进。好多初学者,甚至企业的面试官都把这种标记—复制策略认为是关于垃圾回收策略问题的唯一标准答案,好像垃圾回收策略就应该都是这样的,这种理解是不正确的。
标记—整理算法(Mark-Compact)
在标记—清除算法基础上多了一步整理的过程。
- 标记需要回收的对象
- 把所有存活的对象移动到内存的一端
- 清理存活对象空间以外的所有内存
缺点:(相较标记—清除算法)
- 移动整理对象,回收过程更加复杂
- 移动对象时,必须暂停用户进程
网友评论