golang GC小记

写屏障 和 读屏障

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

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

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

golang里面都是使用的写屏障

插入写屏障和删除写屏障

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

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

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

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

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

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

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

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

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

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

相关推荐
卜锦元13 分钟前
Golang项目开发过程中好用的包整理归纳(附带不同包仓库地址)
开发语言·后端·golang
Tony Bai4 小时前
“我曾想付钱给 Google 去工作”—— Russ Cox 深度访谈:Go 的诞生、演进与未来
开发语言·后端·golang
海上彼尚7 小时前
Go之路 - 6.go的指针
开发语言·后端·golang
卜锦元13 小时前
Golang中make()和new()的区别与作用?
开发语言·后端·golang
海上彼尚13 小时前
Go之路 - 3.go的数据类型与转换
开发语言·后端·golang
龙门吹雪13 小时前
Go 语言包初始化顺序详解
golang·init·初始化顺序·依赖包·导入包
海上彼尚14 小时前
Go之路 - 4.go的集合[完整版]
开发语言·后端·golang
阿里巴啦15 小时前
从零搭建移动端数字人生成应用:React + Go + D‑ID 实战
react.js·golang·状态模式·数字人·did·ai移动端数字人
资深web全栈开发16 小时前
Go语言从1.18到1.25版本功能更新详解
开发语言·后端·golang
周杰伦_Jay17 小时前
【字节开源Golang框架Eino】技术详解:架构原理+实战落地+避坑指南(附代码)
架构·golang·开源