Golang的垃圾回收

这里先介绍三个不同的方法

https://zhuanlan.zhihu.com/p/105571503

Mark-And-Sweep Collection (McCarthy, 1960)

如下图,红色表示需要回收的,也被叫做non-reachable。绿色的node表示在heap外的指针

接下来是Mark的部分,每个block留出一个bit。见下图

 

下面是具体的算法: Mark & Sweep

 

 

Copying Garbage Collection

优点:减小内存碎片

缺点:浪费空间(2倍)

https://www.youtube.com/watch?v=P1rU_9IB414 

 

Tri-Color marking

https://zhuanlan.zhihu.com/p/105495961

其中writing barrier可以将mark过程中,新出现的指针指向的block标记为黑色