ZBLOG

golang1.20 gc三色标记法以及混合屏障工作流程

在Go 1.20中,引入了三色标记法(Three-color Marking)和混合屏障工作流程(Mixed Barrier Workflow),这些改进旨在提高垃圾回收器的效率和性能。

三色标记法:

  1. 白色:表示未被访问过的对象。
  2. 灰色:表示已经被访问过的对象,但其子对象尚未完成标记。
  3. 黑色:表示已经被访问过并且其所有子对象都已完成标记。

混合屏障工作流程:

  1. 初始阶段:停止所有goroutine运行,并将gcphase设置为_GCmarktermination,禁用工作者和辅助功能。执行一些准备工作,如刷新mcache(内存缓存)。
  2. 根扫描:从根对象开始递归遍历,并将灰色标记为黑色,同时将其子对象加入到待处理队列中。
  3. 增量扫描:在每次用户程序主动调用垃圾回收时,在增量周期中进行后台的增量标记。此时会重新启动全局运行,并处理待处理队列中的灰色对象,将其标记为黑色,并将其子对象加入到待处理队列中。
  4. 混合写屏障:在并发执行期间,当goroutine试图写入一个指向其他堆上对象的指针时,会触发混合屏障(Mixed Barrier),该屏障将对象标记为灰色,并将其子对象加入到待处理队列中。
  5. 完成扫描:等待增量扫描完成后,继续执行根扫描过程,直到待处理队列为空。最后将gcphase设置为_GCoff,启用写屏障。

这种混合屏障工作流程结合了增量标记和并发清除的优势,允许在运行用户程序时进行一部分垃圾回收工作,以减少停顿时间,并通过并发清除来提高回收效率。

需要注意的是,上述描述仅涵盖了Go 1.20中垃圾回收器的基本原理和工作流程,具体实现可能因版本变化而有所不同。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18387

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?