-
标记-清除
1.1 首先标记所有需要回收的对象
1.2 标记完成后,统一回收掉被标记的对象缺点:内存不连续,产生大量碎片
适用场景:小部分对象需要回收的场景,如:老年代回收,老年代存活对象一般比需要回收的对象多。
标记-清除算法.png -
复制
2.1 将内存分为两部分,每次只使用其中一半
2.2 从使用的一半(上半部分)中找到存活的对象复制到另一半(下半部分)(顺序复制)
2.3 回收上半部分所有内存
2.4 在使用则从下半部分开始使用优缺点:无碎片 内存连续,但是只使用一半内存,浪费空间。存活对象较多的情况下复制对象耗费时间。
适用场景:只有少量对象存活的场景,减少对象复制。
复制算法.png -
标记-整理(标记-压缩)
3.1 标记可回收和存活对象
3.2 将存活对象复制到可回收对象中
3.3 清楚存活对象边界外的所有对象优缺点:内存连续,无碎片,不浪费空间。但是移动对象时更加耗时。
适用场景:内存吃紧又要避免空间碎片的场景。老年代想要避免空间碎片通常使用标记整理法。
标记-整理.png -
分代垃圾回收算法
见此篇文章:https://www.jianshu.com/p/e71d22e79050
网友评论