Go 语言的垃圾回收(Garbage Collection, GC)机制是其内存管理的核心部分,它负责自动检测并回收不再使用的内存。Go 的垃圾回收机制可以分为以下几个主要类别:
1. 标记(Mark)
- 根节点:垃圾回收从根节点(如全局变量、栈上的变量、寄存器等)开始。
- 可达性分析:遍历所有可达对象,标记所有活跃的(即仍在使用的)对象。
2. 清除(Sweep)
- 未标记对象:清除未被标记的对象,即那些不再被任何根节点或活跃对象引用的对象。
- 内存释放:回收这些未标记对象占用的内存,使其可以被再次分配。
3. 并发执行
- 与程序并发:垃圾回收与应用程序的其他部分并发执行,减少程序的暂停时间。
- 低延迟:Go 的垃圾回收器设计目标是尽量减少应用程序的暂停时间。
4. 停止世界(Stop-The-World, STW)
- 标记开始:在垃圾回收的标记阶段开始时,程序的所有 Goroutine 会暂时停止执行,以确保标记的准确性。
- 短暂停顿:这个“停止世界”的事件非常短暂,Go 团队持续优化以减少其影响。
5. 三色标记法
- 黑色: