千家信息网

golang垃圾回收中如何实现删除写屏障

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章将为大家详细讲解有关golang垃圾回收中如何实现删除写屏障,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先声明,golang 没有直接实现过删除写屏障,
千家信息网最后更新 2025年02月01日golang垃圾回收中如何实现删除写屏障

这篇文章将为大家详细讲解有关golang垃圾回收中如何实现删除写屏障,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

首先声明,golang 没有直接实现过删除写屏障,golang 的内存写屏障是由插入写屏障到混合写屏障过渡的。不过,虽然 golang 从来没有直接使用删除写屏障,但是混合写屏障却用到了删除写屏障的思路。

删除写屏障:也叫做基于其实快照的解决方案(snapshot-at-the-begining)。顾名思义,就是在开始 gc 之前,必须 STW ,对整个根做一次起始快照。当赋值器(业务线程)从灰色或者白色对象中删除白色指针时候,写屏障会捕捉这一行为,将这一行为通知给回收器。这样,基于起始快照的解决方案保守地将其目标对象当作存活的对象,这样就绝对不会有被误回收的对象,但是有扫描工作量浮动放大的风险。术语叫做追踪波面的回退。

删除写屏障(基于起始快照的写屏障)有一个前提条件,就是起始的时候,把整个根部扫描一遍,让所有的可达对象全都在灰色保护下(根黑,下一级在堆上的全灰),之后利用删除写屏障捕捉内存写操作,确保弱三色不变式不被破坏,就可以保证垃圾回收的正确性。

伪代码如下:

atomic Write(src, i, ref)    shade(src[i])    src[i] <- ref

复习一下一些概念

赋值器的颜色

  • 灰色赋值器:如果某一个赋值器尚未被回收器扫描过(即赋值器的根还没有被追踪到),或者尽管被扫描过,但是还需要重新扫描
    • golang 插入写屏障的时期,就是灰色赋值器
  • 黑色赋值器:已经被回收器扫描过,不会再对其进行扫描

插入写屏障对应的是灰色赋值器,删除写屏障对应的是黑色赋值器。

三色不变式

  • 强三色:不允许黑色对象指向白色对象
  • 弱三色:允许黑色对象指向白色对象,但必须保证一个前提,这个白色对象必须处于灰色对象的保护下

强三色不变式的框架下:要求黑色赋值器的根只能引用灰色或者黑色对象,不能引用白色对象(因为黑色赋值器不再被扫描,引用白色)。

弱三色不变式的框架下:允许黑色赋值器的根引用白色对象,但前提是白色对象必须处于灰色保护下。

获取赋值器的快照,意味着回收器需要扫描其根并将其置为黑色。我们必须在回收起始阶段完成赋值器快照的获取,并保证其不持有任何白色对象。否则一旦赋值器持有某白色对象的唯一引用并将其写入黑色对象,然后再抛弃该指针,则会违背弱三色不变式的要求。当然,为黑色对象增加写屏障可以捕捉这一内存写操作,但如此一来,该方案将退化到强三色不变式的框架下。因此,基于其实快照的解决方案将只允许黑色赋值器的存在。

删除写屏障怎么保证弱三色不变式,如下示意图:



我们看到第三张图显示,黑色指向白色没问题,只要最后 delete 指针的时候 Z 对象置灰色,那么回收的正确性就可以保证。

关于"golang垃圾回收中如何实现删除写屏障"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

对象 屏障 黑色 白色 灰色 快照 保证 起始 方案 回收器 垃圾 前提 就是 指向 指针 时候 框架 篇文章 解决方案 保护 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 排查挖矿行为 网络安全 测试数据库压力 水模型软件开发小公司有前途吗 软件开发功能说明书 编写 魂三服务器关闭开挂 如何获取网络安全的数据 服务器系统2012怎么重启 摩尔庄园如何看好友在哪个服务器 软件开发知识产权和所有权 睿能科技工业互联网芯片 多线程web代理服务器 低年级网络安全手抄报内容 本网站服务器设置在美利坚合众国 数据库操作英文缩写 河北进口软件开发差异 存储服务器哪个更安全 我的世界服务器村民怎么回血 浙江网络安全特训营收费标准 一般网络安全设备需要哪些配置 pad用的数据库软件 在上海弄软件开发工资高吗 计算机网络技术能做什么专业 网络安全意识形势总结 天水翌宏网络技术有限公司 数据库的nv 九匡网络技术有限公司 怎样评论网络安全科技馆 艾尔登法环游戏服务器登录不上 电脑服务器报价 在数据库中一个汉字占几个字符
0