【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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:524133
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

一网打尽!音乐高手都在使用的打谱软件不藏私推荐!

懒得勤快

45岁程序员发求职贴:精通各种技术体系,却连个面试机会都没有…

Java高级开发

Java 程序员 面试 职场

盲盒开发蛋趣芒趣一番赏源码搭建

有一说一,阿里内部SpringBoot王者晋级之路全彩小册开源,让我开了眼

热爱java的分享家

Java 架构 面试 程序人生 编程语言

987页的Java面试宝典,看完才发现,应届生求职也没那么难

热爱java的分享家

Java 架构 面试 程序人生 编程语言

从0到10彻底搞懂信息流【投放系统】

水泽山林

系统架构 推荐系统 智能投放 内容平台

关于openGauss账本数据库:你想知道的这里都有

openGauss

如何用EasyRecovery恢复中毒U盘中丢失的文件

淋雨

EasyRecovery

盲盒开发盲盒系统开发定制

盲盒开发盲盒源码搭建系统开发

盲盒一番赏APP开发源码搭建

AI界的革命!终于可以自动标注了!

百度开发者中心

AI 自动标注工具

Hadoop实战篇-集群版(2)

进击的梦清

大数据 hadoop zookeeper

我就获取个时间,机器就down了

安第斯智能云

Linux 后端

解决文件存储难题 openGauss隆重推出段页式特性

openGauss

Python代码阅读(第59篇):根据value查询字典key值

Felix

Python 编程 阅读代码 字典 Python初学者

HBase shell get命令从二进制还原真实值

WindFlying

dart系列之:元世界pubspec.yaml文件详解

程序那些事

flutter dart 程序那些事 11月日更

为何飞书成了先进企业的标配?

ToB行业头条

SOLID原则之 单一职责原则

面向对象的猫

SOLID

盲盒app开发小程序源码定制

低代码——不应该只是玩具

行云创新

云原生 低代码 开发 高效

这个无敌设计,可以解析并运算任意数学表达式

Tom弹架构

Java 架构 设计模式

Ustore在openGauss闪亮登场,重构openGauss数据存储的灵魂

openGauss

“太白”团队加入OpenInfra Labs,联合社区成员共同完善多云管理技术

华为云GaussDB NoSQL云原生多模数据库的超融合实践

华为云数据库小助手

GaussDB 华为云数据库 GaussDB NoSQL

盲盒app开发盲盒小程序开发

快速剪辑-助力度咔智能剪辑提效实践

百度Geek说

架构 后端

使用 Node.js 消费SAP Cloud for Customer上的Web service

Jerry Wang

node.js SAP C4C 11月日更

ABAP 和 Java 的单元测试 Unit Test

Jerry Wang

Java abap 11月日更 JavaSAP

CSS奇技淫巧之滤镜(二)drop-shadow

Augus

CSS 11月日更

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