golang/gc
三色标记法
(1)、有黑白灰三个集合。初始时所有对象都是白色。
(2)、从Root对象开始标记(协程栈, 全局对象等), 将所有可达对象标记为灰色。
(3)、从灰色对象集合取出对象, 将其引用的对象标记为灰色, 放入灰色集合, 并将自己标记为黑色。
(4)、重复第三步, 直到灰色集合为空, 即所有可达对象都被标记。
(5)、标记结束后, 不可达的白色对象即为垃圾。对内存进行迭代清扫, 回收白色对象。
(6)、重置GC状态。
使用gctrace分析gc的实际情况
Golang,自带gc,在不改动代码的情况下,我们可以设置GODEBUG='gctrace=1'环境变量启动程序,来向标准错误输出打印,查看gc 是否有异常: