垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。
GOLANG的垃圾回收机制
现在go1.14所用的是三色标志法和GC混合写屏障,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收
GC版本变化
Go V1.3 标记清除(mark and sweep)
Go V1.5 三色标记法
Go V1.8 加入混合写屏障
Go V1.3的标记清除
标记清除的流程
- 触发GC,暂停程序业务逻辑(STW),找出可达对象和不可达对象

如图所示,箭头表示引用关系,1,2,3,4,7这五个对象就是可达对象,5和6这两个对象就是不可达对象 - 开始标记,找到它所有的可达对象,并做上标记,如上图中的红色对象部分。
- 完成标记,开始清除未标记的对象
- 完成清除,停止暂停,然后循环重复以上四步,直到该程序进程生命周期结束
整个流程的图示:

问题:触发GC的条件是什么

本文详细介绍了Golang从1.3到1.8版本的垃圾回收(GC)机制变化,包括标记清除、三色标记法以及混合写屏障机制。GC主要目标是缩短STW时间,提高程序性能。三色标记法引入了强/弱三色不变式,并通过插入和删除写屏障优化,1.8版本的混合写屏障进一步提升了效率。
最低0.47元/天 解锁文章
708





