大家好,又见面了,我是你们的朋友全栈君。
虽然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卡顿
我们来看一下图解:
开始标记