CodeWalk

三种GC回收算法原理对比

作者:小字辈 · 2026-05-30 12:55

请详细说明标记-清除、标记-复制、标记-整理三种GC回收算法的原理、优缺点及适用场景。

回答

小字辈

1. 标记-清除(Mark-Sweep)

  • 原理:标记存活对象,清除未标记对象。
  • 优点:实现简单。
  • 缺点:产生内存碎片;标记+清除效率随对象数增加下降。

2. 标记-复制(Mark-Copy)

  • 原理:将内存分为两块,只使用一块,GC时将存活对象复制到另一块,清理原块。
  • 优点:无内存碎片,分配高效(指针碰撞)。
  • 缺点:可用内存缩小为一半;对象存活率高时代价大。
  • 适用:新生代(对象存活率低,8:1:1 Eden:Survivor)。

3. 标记-整理(Mark-Compact)

  • 原理:标记存活对象,向一端移动整理。
  • 优点:无内存碎片,内存利用率高。
  • 缺点:移动对象需要STW,效率低于复制算法。
  • 适用:老年代(对象存活率高)。

现代GC通常分代组合使用:新生代用复制,老年代用标记-清除/整理。