GC常见算法

59 阅读2分钟

GC常见算法

垃圾收集(Garbage Collection) 通常被称为"GC"

引用计数法

  • 每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。

    优缺点

    • 可以即时回收垃圾对象
    • 减少程序的卡顿时间
    • 无法回收循环引用的对象
    • 资源消耗较大

标记-清除法

  • "标记-清除"(Mark-Sweep)算法,如它的名字一样,算法分为"标记"和"清除"两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的

  • 它的主要缺点有两个:一个是效率问题,标记和清除过程的效率都不高;另外一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作

    优缺点

    • 可以回收循环引用的对象
    • 容易产生碎片化空间,浪费空间
    • 不会立即回收垃圾对象

标记整理算法

  • 标记整理可以看做是标记清除的增强

  • 标记阶段的操作和标记清除一致,遍历所以对象将当前活动的可达对象进行标记。

  • 清除阶段会先执行整理,移动对象位置。

    优缺点

    • 减少碎片化空间

    • 不会立即回收垃圾对象