NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Go 1.6 将进一步改进垃圾收集器

  • 2015-09-11
  • 本文字数:997 字

    阅读完需:约 3 分钟

尽管 Go 1.5 刚刚发布,仍然相对较新,但是 Go 团队已经在致力于改进其新的低延迟并发垃圾收集器,希望 Go 更适合新的应用领域。Google 工程师 Austin Clements Rick Hudson 如是

Go 1.5 用新的垃圾收集器代替了原来的STW(stop-the-world) GC,解决了延迟问题。当负载较重时,每50ms,新的GC 的活动时间可以控制在10ms 以下,从而使Go 程序在一般情况下能运行得更快些。在更极端的情况下,停顿可以从300ms 降到4ms

Go 1.6 的目标是进一步稳定 GC,并在以下几个方面做出改进:

  • 状态协调(State coordination):Go 1.5 GC 有个主要瓶颈是从 Go 1.4 继承来的,源自其集中式的 GC 协调器(coordinator),这是一个单独的 goroutine,它会将工作进一步分派给 worker goroutine 去完成。一种解决方案是用去中心化的状态机代替集中式协调器。这样修改有个额外的好处,使得重新设计标记完成屏障(mark completion barrier)成为可能,因为它已经变得非常凌乱,而且性能很差。
  • 信用系统(Credit system):Go 1.5 在两个不同的地方使用了一个信用系统:一个是确保清扫(sweeping)在一个 GC 周期和下一次触发堆操作(the next heap trigger)之间完成,一个是确保扫描(scanning)在触发堆操作(an heap trigger)和随后实现堆处理目标之间完成。改进信用系统的一种建议方法是,使其操作总是在 black 阶段进行,以避免未完成的分配操作进入下一个 GC 周期。
  • 标记结束(Mark termination):根据 Clements 和 Hudson 的介绍,在 Go 1.5 中,标记结束阶段是停顿时间的大头。这里的目标是尝试并确保大部分应用可以在 10ms 停顿的阈值下运行,这也是 Go 1.5 在很多情况下已经实现了的。希望所做修改的复杂度较低或中等,比如把 finalizer 扫描从标记结束阶段移到并发扫描,这样对于每 1GB 大小的堆,应该可以节省 1ms,以及去掉一个成本很高的计数循环,对于较大的堆,这个循环占去了标记阶段的另外一半。
  • sweeper 和 scavenger:某些程序会在 sweeper 上消耗大量时间,在这上面投入些精力,应该有性能改进。一个非常激进的方案是完全去掉 sweeper。还有一个不那么激进的方案,可以在 GC 阶段最后,尽早释放较大的对象,并且在所有的系统上支持 scavenger,不管物理页面是多大。

上面只是对计划所做改进的一个概览,欲全面了解,可以阅读原始文档。文档中还有进一步指向 GitHub issues 的链接,这些 issues 记录 了每个改变背后的理由以及建议方案。

2015-09-11 16:443146
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 130.2 次阅读, 收获喜欢 34 次。

关注

评论

发布
暂无评论
发现更多内容

技术人的 2023 总结:人工智能-基于机器学习的环境污染影响评估学习

恒山其若陋兮

#技术人的2023总结

企业云桌面解决方案

青椒云云电脑

云桌面 云桌面解决方案

WuBit:聚合BRC20资产交易,续写铭文市场新浪潮

石头财经

Ampere 年度展望:AI 浪潮改变计算格局,预测 2024 年三大趋势

科技热闻

第33期 | GPTSecurity周报

云起无垠

2023年度系列榜单出炉 这些优质应用你都用过多少?

最新动态

低代码实施复杂应用的实践方法

明道云

极狐GitLab 集成 sonarqube 实践指南

极狐GitLab

Kuasar成为CNCF官方项目,探索容器运行时新纪元

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟

Flink Has Become the De-facto Standard of Streaming Compute

Apache Flink

大数据 flink 实时计算

好用的IOS数据传输工具:FonePaw iOS Transfer中文激活

胖墩儿不胖y

Mac软件 iOS数据传输工具

Mac电脑视频编辑处理:Apeaksoft Video Editor 激活最新版

mac大玩家j

Mac软件 视频处理工具 视频编辑器 视频编辑管理

2024年度腾讯犀牛鸟精英人才计划开放申请

Geek_2d6073

IPQ9574-IPQ8072 has 10G Ethernet port- What is the performance difference?

wifi6-yiyi

ipq9574 10G Ethernet port

连锁餐饮数字化:一体化运营管控平台

明道云

Go 1.22新特性前瞻

Tony Bai

golang Go 语言 go1.22

基于大语言模型LangChain框架:知识库问答系统实践

博文视点Broadview

IPQ6018 vs. IPQ8074: A Selection Guide for Wireless Network Processors

wallysSK

《网络安全事件报告管理办法(征求意见稿)》正在公开征求意见

行云管家

网络安全 网络安全法

一起学Elasticsearch系列-写入和检索调优

Java随想录

Java 大数据 Elastic Search

E3PO:畅想 360° 视频传输开发实战

恒山其若陋兮

E3PO 畅想 360° 视频传输

图形工作站跟服务器有什么区别?

青椒云云电脑

图形工作站

提升用户体验--了解和探索无障碍性测试

QE_LAB

无障碍 测试技术

Nacos 荣获 GLCC 优秀社区,同时 2.3.0-BETA 发布,欢迎试用

阿里巴巴云原生

阿里云 云原生 nacos

绝地反击,不做背锅侠!

尚思卓越

运维 堡垒机

Vue 2最终版本 v2.7.16 已发布

南城FE

JavaScript Vue 前端开发

如何用零代码工具去经营好企业的客户

明道云

ATorch:蚂蚁开源PyTorch分布式训练扩展库,助你将硬件算力压榨到极致

AI Infra

人工智能 aiinfra

我在平台与AIGC的交互的组件设计方案(2)

软件工程师-罗小东

OpenAI换血大震动始末:“ChatGPT之父”奥特曼,缘何被“扫地出门”?

智趣匠

WuBit:聚合BRC20资产交易,续写铭文市场新浪潮

BlockChain先知

Go 1.6将进一步改进垃圾收集器_语言 & 开发_Sergio De Simone_InfoQ精选文章