GC
三色标记法
- 白
- 灰
- 黑
写屏障
写屏障是Go GC过程中的一种用于并发标记清除的保护机制。
在并发标记过程中,对于新创建的对象,可能会存在刚好错过标记的情况,这回导致新创建的对象被立即回收的风险。
写屏障提供了一种机制,在垃圾回收过程中,新创建的对象会被标记为脏对象,并最后将其转化为灰色
读屏障
插入写屏障
删除写屏障
混合写屏障
GC触发机制
- 内存分配,当系统分配内存超过某个阈值,就会触发垃圾回收
- 分代回收:通过环境变量
GOGC
来控制触发垃圾回收的阈值,该值默认是100。表示新生代的已使用内存达到总内存的1%时,会触发垃圾回收。
- 分代回收:通过环境变量
- 定时器,由sysmon监控线程周期性的触发垃圾回收
- 手动触发:通过
runtime.GC()
运行时接口手动触发垃圾回收
Go中一次完整的GC流程
标记阶段
清除阶段
两次 GC 周期重叠会引发什么问题
GC是并发的标记与并发的清除,两次GC应该是可以同时进行,可能导致的主要问题就是性能下降。
GC 触发机制是什么样的
- 手动触发:通过运行时接口手动触发垃圾回收
- GC周期性定时触发:定时器会在一定时间间隔后触发垃圾回收
- 内存分配:当分配内存的速度超过了垃圾回收的速度,会触发垃圾回收