GO GC
参考优秀博文:https://studygolang.com/articles/27243
笔记
-
三色标记法
- 从程序的根节点集合中扫描所有对象,标记为白色;
- 从根节点非递归遍历所有可达对象,从白色集合中删除,标记为灰色;
- 遍历灰色集合,将灰色对象应用的对象从白色集合中删除,加入灰色集合中,并将遍历过的灰色对象标记为黑色;
- 重复上一步,直到灰色集合为空;
-
混合写屏障机制
- 只对堆空间启用该机制,不对栈空间使用;
- gc开始时,扫描所有goroutine的栈,并将所有可达对象标记为黑色;
- gc期间,栈上创建的对象,均为黑色;
- gc期间,堆上删除的对象,置为灰色;
- gc期间,堆上创建的对象,置为灰色;
-
STW
- goV1.8之后,gc开始和结束时会各有一次stw,时间极短,效率较高;