如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

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

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

关注

评论

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

四年Java开发,刚从美团、京东、阿里面试归来(已拿offer),分享个人面经

Java架构之路

Java 程序员 架构 面试 编程语言

万字详解 阿里面试真题:请你说说索引的原理

Java架构师迁哥

第五课技术选型作业

Geek_michael

极客大学架构师训练营

使用LL算法构建AST —— 编程训练

三钻

Java 算法 大前端 七日更

用 Proxy 简单实现 Vue 3 的 Reactive

三钻

Java 大前端 Vue3 Proxy 七日更

区块链钱包app系统开发源码案例

区块链和通证经济带来的,是一部分股份制公司的消亡与重生

CECBC

金融 通证经济

TARS 服务信息上报|全方位服务监控

TARS基金会

微服务 TARS 监控告警

【数据结构与算法】分析时间复杂度与空间复杂度

三钻

数据结构与算法

鹅厂面经,希望对大家有用

Bryant-cx

大前端 面经

分布式缓存架构

raox

极客大学架构师训练营

盘点2020 | 所思、所遇、所学、所悟

三钻

程序员 大前端 盘点2020

字典树 —— 字符串分析算法

三钻

算法 大前端 七日更 字典树

Java并发编程:AQS的自旋锁

李尚智

Java java 并发

有效破解行业难点 专家称区块链+医疗发展还需找准应用场景

CECBC

区块链 大数据 医疗

后端缓存代码实践

Albert

缓存击穿 七日更

TARS RPC 通信框架|提供多种远程调用方式

TARS基金会

微服务 RPC 远程调用 TARS

音乐后期处理:音乐失真效果制作

懒得勤快

音乐制作 编曲 编曲宿主 mid 音乐后期

世界之书:《一个人的朝圣》与重归信仰

lidaobing

一个人的朝圣 28天写作

TypeScript | 第四章:命名空间和模块

梁龙先森

typescript 大前端 七日更

摸透原理|一文带你了解 Redis 列表底层的实现方式

Java架构师迁哥

用 Range 实现 CSSOM 精准操作

三钻

大前端 Range 七日更 CSSOM

week5-homework-一致性哈希

J

极客大学架构师训练营

10万级ETL批量作业调度工具Taskctl-Web应用版0元授权永久使用

敏捷调度TASKCTL

大数据 kettle 运维自动化 海豚调度 批量任务

阿里高工手码”537页Spring源码速成手册“3天直接带你飙向实战

比伯

Java 编程 架构 面试 计算机

Nice!有了这份Alibaba内部 “Java面试宝典”,跳槽面试稳了

Java架构之路

Java 程序员 架构 面试 编程语言

真香!阿里P8耗时半年著作660页Java高并发与网络编程实战总结

Java架构之路

Java 程序员 架构 面试 编程语言

Prometheus的使用:编写自己的exporter

Rayzh

Prometheus 监控告警

数字资产币种钱包APP系统开发方案

全国首张数字人民币保单成功出单

CECBC

数字人民币保单

计算存储分离在消息队列上的应用

京东科技开发者

大数据 云原生 中间件 消息中间件

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