golang GC小记

写屏障 和 读屏障

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

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

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

golang里面都是使用的写屏障

插入写屏障和删除写屏障

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

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

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

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

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

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

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

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

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

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

相关推荐
贺小涛5 小时前
python和golang进程、线程、协程区别
java·python·golang
迷茫运维路7 小时前
云枢运维管理系统
运维·golang·kubernetes·gin·casbin
jieyucx7 小时前
Go 语言运算符与控制台输入输出详解
开发语言·后端·golang
userxxcc10 小时前
Waigo是用“Golang+Web”写的“视图窗口+稳定服务”的桌面端(Win、Mac、Ubuntu)多功能程序基座。开箱即用但有一定上手门槛。
javascript·golang·桌面应用基座·wails3
geovindu10 小时前
go: Prototype Pattern
开发语言·设计模式·golang·原型模式
codeejun11 小时前
每日一Go-55、分布式 ID 生成(雪花算法 / Segment / Redis / DB)
数据库·分布式·golang
Tomhex20 小时前
Go容易出错的地方总结
golang
techdashen1 天前
Go 标准库 JSON 包迎来重大升级:encoding/json/v2 实验版来了
开发语言·golang·json
银色火焰战车1 天前
浅析golang中的垃圾回收机制(GC)
java·jvm·golang
jieyucx1 天前
Go 语言零基础入门:编写第一个 Hello World 程序
开发语言·后端·golang