一 Go垃圾回收机制概述
C++使用指针引用计数方式来回收对象,但是该方式不能处理循环引用!所以之后的GC算法进行了改进,出现了:标记清理、节点复制、分代收集等算法。
Go语言的垃圾回收使用标记清理算法,将需要的内存块进行标记(mark),没有标记的内存块将会被清理(sweep)。Go用到的策略有:
- 并发标记和清理(concurrent mark and sweep)
- 写屏障(write barrier)
- 非分代(non-generational)
- 非紧缩(non-compacting))
二 标记清理算法
2.0 标记清理算法简介