Golang GC

垃圾回收优化

在前文中提到,golang 的垃圾回收算法属于 标记-清除,是需要 STW 的。STW 就是 Stop The World 的意思,在 golang 中就是要停掉所有的 goroutine,专心进行垃圾回收,待垃圾回收结束后再恢复 goroutine。而 STW 时间的长短直接影响了应用的执行,如果时间过长,那将是灾难性的。为了缩短 STW 时间,golang 不对优化垃圾回收算法,其中写屏障(Write Barrier)和辅助GC(Mutator Assist)就是两种优化垃圾回收的方法。

写屏障(Write Barrier):上面说到的 STW 的目的是防止 GC 扫描时内存变化引起的混乱,而写屏障就是让 goroutine 与 GC 同时运行的手段,虽然不能完全消除 STW,但是可以大大减少 STW 的时间。写屏障在 GC 的特定时间开启,开启后指针传递时会把指针标记,即本轮不回收,下次 GC 时再确定。
辅助 GC(Mutator Assist):为了防止内存分配过快,在 GC 执行过程中,GC 过程中 mutator 线程会并发运行,而 mutator assist 机制会协助 GC 做一部分的工作。

一文弄懂 Golang GC、三色标记、混合写屏障机制【图文解析GC】
浅析 Golang 垃圾回收机制

你可能感兴趣的:(gogc)