写点什么

Go 1.4+ 垃圾收集器计划与路线图

  • 2014-08-13
  • 本文字数:1142 字

    阅读完需:约 4 分钟

自从 Go 语言于 2009 年 11 月对外宣布以来,短短几年时间,这门语言发展迅猛,性能也在不断提升,而垃圾收集器的改进正是其中的重要一环。

Go 1.1 中,Go 语言引入了并行垃圾收集器,可以减少程序在多 CPU 上运行时的延迟;同时垃圾收集也更为精确了,以牺牲较少的 CPU 时间为代价,换来了堆内存的显著减少。到了今年 6 月份发布的 Go 1.3 中,精确性有所改进,又实现了检查栈上的值时的精确性。

那后续版本中,垃圾收集器会有怎样的变化呢?Richard L. Hudson 近日撰文介绍了Go 1.4+ 垃圾收集器的计划和路线图。

文中指出,计划于2015 年6 月发布的Go 1.5 的GC 的目标是减少延迟,从而使Go 语言能够满足对响应时间要求比较高的系统。该版本希望将GC 延迟限制在10ms 以内,而且每50ms 保证Go 应用代码有40ms 以上的执行时间。实现上将考虑一种混合式的Stop-the-World(STW)/ 并发垃圾收集器(CGC)。CGC 的主要工作将在一个或多个专用的CPU 上完成,而应用代码则在其他CPU 上执行。

文中提到,用繁复的垃圾收集术语来讲,现在为Go 1.5 提议的垃圾收集器是一种“非分代的、非移动的、并发的、三色的标记清除垃圾收集器”。像分代,JVM 的Hotspot 实现、Google 的v8 JavaScript 引擎等采用的就是分代垃圾收集技术。Hotspot 中的堆区分为年轻代和老年代,不同的代会针对性地选择不同的收集算法。移动对象是复制类垃圾收集算法常用的一种操作,不过移动有一个缺点,需要修改指向被复制对象的所有指针。三色是GC 跟踪过程中的一种标记策略,认定为活对象的标记为黑色,可能是死对象的标记为白色;可以参考这个帖子。正在处理或者需要重新处理的标记为灰色。标记完成之后,仍为白色的则是垃圾。具体算法,感兴趣的读者可以参考《The Garbage Collection Handbook: The Art of Automatic Memory Management》一书。低延迟意味着会影响吞吐量,但是影响程度如何,还有待观察。文中指出,随着CPU 核数的增加,拿出一个或多个核来执行GC,应该不是很大的问题。

至于Go 1.6 这个将于2015 年12 月发布的版本,其GC 将根据1.5 版本的经验、用户反馈和使用案例来改进。1.6 版本很可能会加入指针碰撞分配(bump pointer allocation)和分代复制收集技术。

为配合垃圾收集器的改造,1.4 版本中将去掉使用了Go 指针及各种与并发或复制收集器不兼容的不安全指针结构的C 运行时代码,用户也需要去掉其代码中的不兼容结构。

相关讨论可以参阅 golang-dev 邮件列表。HackerNews 上的讨论也很热烈。有些网友介绍了实际使用体验。感兴趣的读者可以参考。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-13 02:524686
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

YashanDB 使用 imp 导入时报 YAS-08023 的原因与处理办法

数据库砖家

数据库

YashanDB 使用 listagg 报 YAS-02511 的原因及解决方案

数据库砖家

数据库

使用 JDBC 批量插入 YashanDB GIS 空间数据的示例

数据库砖家

数据库

如何在 YashanDB 备机上安全进行备份与恢复操作

数据库砖家

数据库

最新开源 TEN VAD 与 Turn Detection 让 Voice Agent 对话更拟人 | 社区来稿

RTE开发者社区

迁徙:微信鸿蒙版的长征

脑极体

AI

一键多环境构建——用 Hvigor 玩转 HarmonyOS Next

鸿蒙魔法师

鸿蒙 HarmonyOS HarmonyOS NEXT Harmony5

TEN 开源超轻量 VAD 和全双工对话轮次检测模型;Stability AI 发布全新端侧音频生成模型,无版权风险丨日报

RTE开发者社区

AARRR模型是什么,包括哪些阶段?一文弄懂PM必备的思维模型!

职场工具箱

人工智能 产品 AI 产品经理 AIGC

RAG创始人关于RAG Agent的10个思考(上)

Bruce Talk

AI RAG知识库

《算法导论(第4版)》阅读笔记:p82-p82

codists

算法

可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse

SelectDB

elastic 可观测性 实时数仓 Clickhouse 数据库 大数据

根据数据表快速生成原型图的工具

执于业务

《算法导论(第4版)》阅读笔记:p76-p81

codists

算法

Uniapp开发鸿蒙应用时如何运行和调试项目

幽蓝计划

YashanDB 收集统计信息时报 YAS-00507 错误的处理方法

数据库砖家

数据库

Hive 初始化 YashanDB 报错 YAS-04209 的原因与处理办法

数据库砖家

数据库

Python 查询 GBK 编码的 YashanDB CLOB 字段数据被截断的原因与修复

数据库砖家

数据库

想要给软件加点功能啥的,源码是必须要有的

程序员郭顺发

打造了一个未来感十足的图书管理 App 个人页面

繁依Fanyi

全平台开源即时通讯IM聊天框架MobileIMSDK的服务端开发指南,支持鸿蒙NEXT

JackJiang

网络编程 即时通讯 IM

新一代SRE:AI、可观测与未来丨暨2025第三届中国SRE大会,邀您共赴科技盛宴!

雅菲奥朗

使用 Druid 查询 GIS 空间数据时报 read time out 的排查与规避方法

数据库砖家

数据库

通过 JDBC 向 YashanDB 批量插入空间数据的标准写法

数据库砖家

数据库

华为云超节点创新算力基础设施,推动千行万业AI应用开发落地

轶天下事

为什么在中国开源软件赚不到钱?

雅菲奥朗

#开源

MoE大模型迎来“原生战友”:昇腾超节点重构AI基础设施

Alter

AI 大模型 昇腾AI MoE

RAG检索实践:多路检索(PostgreSQL环境准备)

程序员架构进阶

全文检索 5月日更 大模型 PgSQL rag

从China P&E 2025 看闪迪创作者系列如何提升生产力

极客天地

RAG创始人关于RAG Agent的10个思考(下)

Bruce Talk

AI RAG知识库

我这是“小作坊”,没那么多时间为爱奉献!

程序员郭顺发

Go 1.4+垃圾收集器计划与路线图_语言 & 开发_臧秀涛_InfoQ精选文章