常见的垃圾回收算法

2022-09-16  本文已影响0人  糯米团子123
  1. 标记-清除
    1.1 首先标记所有需要回收的对象
    1.2 标记完成后,统一回收掉被标记的对象

    缺点:内存不连续,产生大量碎片

    适用场景:小部分对象需要回收的场景,如:老年代回收,老年代存活对象一般比需要回收的对象多。


    标记-清除算法.png
  2. 复制
    2.1 将内存分为两部分,每次只使用其中一半
    2.2 从使用的一半(上半部分)中找到存活的对象复制到另一半(下半部分)(顺序复制)
    2.3 回收上半部分所有内存
    2.4 在使用则从下半部分开始使用

    优缺点:无碎片 内存连续,但是只使用一半内存,浪费空间。存活对象较多的情况下复制对象耗费时间。

    适用场景:只有少量对象存活的场景,减少对象复制。


    复制算法.png
  3. 标记-整理(标记-压缩)
    3.1 标记可回收和存活对象
    3.2 将存活对象复制到可回收对象中
    3.3 清楚存活对象边界外的所有对象

    优缺点:内存连续,无碎片,不浪费空间。但是移动对象时更加耗时。

    适用场景:内存吃紧又要避免空间碎片的场景。老年代想要避免空间碎片通常使用标记整理法。


    标记-整理.png
  4. 分代垃圾回收算法
    见此篇文章:https://www.jianshu.com/p/e71d22e79050

上一篇下一篇

猜你喜欢

热点阅读