Go 语言中 GC 的流程是什么?

Go1.14 版本以 STW 为界限,可以将 GC 划分为五个阶段:

GCMark 标记准备阶段,为并发标记做准备工作,启动写屏障

STWGCMark 扫描标记阶段,与赋值器并发执行,写屏障开启并发

GCMarkTermination 标记终止阶段,保证一个周期内标记任务完成,停止写屏障

GCoff 内存清扫阶段,将需要回收的内存归还到堆中,写屏障关闭

GCoff 内存归还阶段,将过多的内存归还给操作系统,写屏障关闭。