golang/gc

三色标记法

(1)、有黑白灰三个集合。初始时所有对象都是白色。

(2)、从Root对象开始标记(协程栈, 全局对象等), 将所有可达对象标记为灰色。

(3)、从灰色对象集合取出对象, 将其引用的对象标记为灰色, 放入灰色集合, 并将自己标记为黑色。

(4)、重复第三步, 直到灰色集合为空, 即所有可达对象都被标记。

(5)、标记结束后, 不可达的白色对象即为垃圾。对内存进行迭代清扫, 回收白色对象。

(6)、重置GC状态。

使用gctrace分析gc的实际情况

Golang,自带gc,在不改动代码的情况下,我们可以设置GODEBUG='gctrace=1'环境变量启动程序,来向标准错误输出打印,查看gc 是否有异常: