← 返回日报
精读 预计 5 分钟

Watching Go's new garbage collector move through the heap

摘要

文章先用 heapwalk 程序对比 Go 与 C# 的堆分配:Go 将同尺寸对象聚集在 span 内,C# 则分散且支持移动;接着解释传统 mark-sweep 的指针随机访问问题,以及 Green Tea 通过扫描 span 并基于指针排队后续 span 的方式改善缓存;用 readorder 工作负载和 perf(L1 / L3 MPKI)展示新 GC 的性能提升;最后演示释放 90% 对象后 Go 因不移动而无法回收整页内存的场景,并对比手动复制对象或 C# 的效果。

荐读理由

文中的 heapwalk.go、readorder.go 和 perf 脚本让你能可视化堆分配、复现 L1 MPKI 测量,直接迁移到自己 Go 项目判断 Green Tea GC 是否减少缓存未命中。

Lobsters · 1 赞 · 0 评 讨论 → 阅读原文 →

这条对你有帮助吗?