golang GC小记

写屏障 和 读屏障

就是在底层关联对象的时候设置的hook钩子,

在分配或者释放内存的时候的hook就是写屏障

在读取内存的时候的hook就是读屏障

golang里面都是使用的写屏障

插入写屏障和删除写屏障

在引用对象时的hook就是插入写屏障

在取消引用对象时的hook就是删除写屏障

go在并发运行时,大部分的操作都发生在栈上,函数调用会非常频繁。数十万goroutine的栈都进行写屏障性能问题非常大,基本不可行。

v1.5使用的是插入写屏障,由于栈是没有插入写屏障,那么就可能会存在在GC过程中栈上黑色对象引用白色的对象的情况。所以完成三色遍历后,需要单独对栈进行一次STW,rescan。

v1.8 采用的是混合写屏障

你可以理解为 插入写屏障和删除写屏障 混合存在

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

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

堆上被删除的对象标记为灰色 (删除写屏障)

堆上新添加的对象标记为灰色 (插入写屏障)

相关推荐
lmryBC492 小时前
golang接口-interface
java·前端·golang
浮尘笔记3 小时前
go-zero使用elasticsearch踩坑记:时间存储和展示问题
大数据·elasticsearch·golang·go
冷琅辞6 小时前
Go语言的嵌入式网络
开发语言·后端·golang
徐小黑ACG9 小时前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
能来帮帮蒟蒻吗20 小时前
GO语言学习(16)Gin后端框架
开发语言·笔记·学习·golang·gin
JavaPub-rodert20 小时前
一道go面试题
开发语言·后端·golang
6<720 小时前
【go】静态类型与动态类型
开发语言·后端·golang
weixin_420947641 天前
windows golang,consul,grpc学习
windows·golang·consul
Json20113151 天前
Gin、Echo 和 Beego三个 Go 语言 Web 框架的核心区别及各自的优缺点分析,结合其设计目标、功能特性与适用场景
前端·golang·gin·beego
二狗哈1 天前
go游戏后端开发21:处理nats消息
开发语言·游戏·golang