大家好,又见面了,我是你们的朋友全栈君。

虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。

以下是Golang GC算法的里程碑:

  • v1.1 STW
  • v1.3 Mark STW, Sweep 并行
  • v1.5 三色标记法
  • v1.8 hybrid write barrier
引用计数(reference counting)标记-清扫(mark & sweep)复制收集(Copy and Collection)
标记-清扫(mark and sweep)

标记-清扫(Mark And Sweep)算法

此算法主要有两个主要的步骤:

  • 标记(Mark phase)
  • 清除(Sweep phase)

第一步,找出可达的对象,然后做上标记。
第二步,回收未标记的对象。

stop the world卡顿

我们来看一下图解:

开始标记