Skip to content

golang GC 浅析

Posted on:November 2, 2023 at 06:59 PM

golang 不需要开发者关心如何GC,不需要像C或者C++那样精准的控制每一段内存,防止内存泄漏,golang 有auto release 机制,它是如何做到的呢。

golang GC 演化历程

Mark STW & Sweep(标记清除法)

三色标记法

三色标记法方案,支持并行GC,即用户代码可以和GC代码同时运行。具体来讲,Golang GC分为几个阶段:

总结一下,Golang的GC过程有两次STW:第一次STW会准备根对象的扫描, 启动写屏障(Write Barrier)和辅助GC(mutator assist).第二次STW会重新扫描部分根对象, 禁用写屏障(Write Barrier)和辅助GC(mutator assist).

GC触发时间

我们可以从代码上优化GC导致的STW