Skip to main content

GC

三色标记法

写屏障

写屏障是Go GC过程中的一种用于并发标记清除的保护机制。

在并发标记过程中,对于新创建的对象,可能会存在刚好错过标记的情况,这回导致新创建的对象被立即回收的风险。

写屏障提供了一种机制,在垃圾回收过程中,新创建的对象会被标记为脏对象,并最后将其转化为灰色

读屏障

插入写屏障

删除写屏障

混合写屏障

GC触发机制

  • 内存分配,当系统分配内存超过某个阈值,就会触发垃圾回收
    • 分代回收:通过环境变量GOGC来控制触发垃圾回收的阈值,该值默认是100。表示新生代的已使用内存达到总内存的1%时,会触发垃圾回收。
  • 定时器,由sysmon监控线程周期性的触发垃圾回收
  • 手动触发:通过runtime.GC()运行时接口手动触发垃圾回收

Go中一次完整的GC流程

标记阶段

清除阶段

两次 GC 周期重叠会引发什么问题

GC是并发的标记与并发的清除,两次GC应该是可以同时进行,可能导致的主要问题就是性能下降。

GC 触发机制是什么样的

  • 手动触发:通过运行时接口手动触发垃圾回收
  • GC周期性定时触发:定时器会在一定时间间隔后触发垃圾回收
  • 内存分配:当分配内存的速度超过了垃圾回收的速度,会触发垃圾回收