栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

golang gc (三色标记法+混合写屏障)归纳

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang gc (三色标记法+混合写屏障)归纳

        随着对go语言的深入学习,逐渐了解到了go的gc实现,晚上关于go gc的发展及过程的文章非常的多,这里我就不继续整了,我就单独总结一下gc的几个知识点吧

一.三色标记法(黑灰白)

        1、初始创建对象都为白色

        2、从根节点遍历所有对象且置为灰色

        3、遍历灰色集合 将灰色对象置为黑色且灰色对象的下级置为灰色。不停的重复这一步直至灰色集合为空

        4、删除白色对象

上面就是最原始的三色标记法流程,但是在gc过程中也会有新的对象产生或者关联,就会可能出现无法删除或者无法保护的情况了 这时候就需要写屏障了

二.屏障机制

1.强-弱 三色不变式   

        禁止黑色对应引用白色对象(强)和  所有被黑色对象引用的白色对象必须被保护(弱)ps 就是白色对象有灰色对象保护,早晚会遍历到

2.插入写屏障

        1.5版本实现了这个,主要是黑色对象引入的灰白对象都会变成灰色 满足强三色

3.删除写屏障

        有插入就有删除,删除时候如果自身是灰色或者白色的时候就会变成灰色,可以保护灰色到白色的引用不会断 但是会丢失精度,要到下一次gc才能回收了

4.混合写屏障 由于栈空间不好弄钩子也就是不好放入屏障逻辑,所有会有stw一次停下来遍历所有栈空间,这个有点致命,所以出现了混合写屏障

        1、GC开始将栈上的对象全部扫描并标记为黑色(之后不再进行第二次重复扫描,无需STW),

        2、GC期间,任何在栈上创建的新对象,均为黑色。

        3、被删除的对象标记为灰色。

        4、被添加的对象标记为灰色。

这样就能全程无stw了  不过在扫描到某个具体的goroutine时候还是会stw对应的栈的且扫描精度会同删除写屏障   有些需要下一次gc才能回收了

1.8以后go 的gc都是由三色标记法+混合屏障了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号