Go 1.26 的性能提升主要集中在新的 Green Tea GC、cgo 调用开销、小对象分配、切片栈分配以及标准库热点函数几个方面。 对大多数后端 / 服务型程序来说,这是一次"白送"的吞吐量和延迟优化升级,无需改代码即可受益。 go
垃圾回收:Green Tea GC 成为默认
- 之前处于实验阶段的 Green Tea GC 在 1.26 中正式成为默认 GC,实现方式改为按连续内存块(span)批量扫描,从"按对象随机访问"变为"按页顺序扫描",显著改善 CPU cache 命中率。 zenn
- 官方基准测试显示,在大量依赖 GC 的真实程序中,GC 开销通常可下降约 10--40%,在请求 99 分位延迟、整体 CPU 占用上都有明显改善。 portallinuxferramentas.blogspot
- 在 Intel Ice Lake、AMD Zen 4 及更新的 amd64 平台上,GC 还能利用向量指令扫描小对象,额外再降低约 10% 左右的 GC 开销。 tonybai
cgo 调用开销下降
- Go 1.26 将 cgo 调用的基线运行时开销降低了大约 30%,这来自于运行时内部对 cgo 边界切换和线程复用逻辑的优化。 go
- 对于频繁调用 C 库(如加解密、图像/视频处理、数据库驱动)的服务来说,这些跨边界调用在同样负载下会明显更快,部分场景的延迟提升甚至可达到约 30--40%。 uradical
小对象分配与切片栈分配
- 运行时为 1--512 字节的小对象新增了按大小"专门化"的分配路径,通过跳转表快速选择对应的 allocator,相比统一通用实现,小对象分配成本在这些场景下可降低最多约 30%。 antonz
- 编译器现在可以在更多场景下把切片的底层数组放在栈上,而不是堆上,从而减少 GC 需要管理的堆对象数量,间接提升运行时性能和降低 GC 压力。 infoworld
标准库热点路径优化
io.ReadAll经过重写,现在在多数输入规模下大约快一倍,同时总内存分配量通常减少约一半,返回的最终切片也会更接近真实大小,减少浪费。 webdelo- 这些优化叠加 GC 与分配器的改进,使得典型的 I/O 密集型 HTTP 服务、日志聚合、文件处理工具在不改代码的前提下就能获得更好的吞吐量和更低的内存占用。 go
对你意味着什么?
- 如果你的服务是典型的微服务 / Web API,存在大量小对象分配、JSON 编解码、I/O 操作,升级到 1.26 一般会看到 GC CPU 时间、整体 CPU 利用率和尾延迟都有可观下降。 zenn
- 如果有大量 cgo 或 syscall 热点(调用 C 库、数据库驱动、系统 API),1.26 的跨边界优化会直接降低这些热点的开销,有利于在相同硬件上跑更多 QPS 或降低云资源成本。 go
如果你愿意贴出当前线上某个服务的 pprof(特别是 gc, allocs, cgo 相关),可以一起具体分析升级到 1.26 后哪些指标最可能改善、该关注哪些基准测试。