golang GC小记

写屏障 和 读屏障

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

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

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

golang里面都是使用的写屏障

插入写屏障和删除写屏障

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

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

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

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

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

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

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

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

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

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

相关推荐
kite012110 小时前
Gin + Zap 日志:构建高性能、结构化的应用日志系统
golang·gin·log·zap
OxYGC11 小时前
[玩转GoLang] 5分钟整合Gin / Gorm框架入门
开发语言·golang·gin
向上的车轮13 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang
360智汇云15 小时前
k8s交互桥梁:走进Client-Go
golang·kubernetes·交互
qq_1728055915 小时前
Go 装饰器模式学习文档
学习·golang·装饰器模式
秦禹辰17 小时前
宝塔面板安装MySQL数据库并通过内网穿透工具实现公网远程访问
开发语言·后端·golang
chen_ever18 小时前
golang之go modules
开发语言·后端·golang
今天头发还在吗20 小时前
【Go】:mac 环境下GoFrame安装开发工具 gf-cli——gf_darwin_arm64
macos·golang·go·gf-cli
是誰萆微了承諾1 天前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
ifanatic1 天前
[每周一更]-(第159期):Go 工程师视角:容器化技术(Docker/Kubernetes)与CI/CD流程的应用场景
docker·golang·kubernetes