垃圾回收优化
在前文中提到,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 垃圾回收机制