AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

解析云原生2.0架构设计的8大关键趋势

华为云开发者联盟

云原生 架构设计 数据治理 存算分离 分布式云

30个类手写Spring核心原理之环境准备(1)

Tom弹架构

Java spring 源码

构建信创基础软硬件共同体,DataPipeline与中科曙光完成产品兼容互认证

DataPipeline数见科技

大数据 中间件 服务器 数据融合

一个渐进式微前端框架 - Fronts

RingCentral铃盛

架构 大前端 测试 经验分享

如何用GoldWave将音频添加生成机械化音效

懒得勤快

CSS之选择器

Augus

CSS 12月日更

斟茶兵——远程进程管理

白粥

进程管理 运维开发 系统维护 离职交接 日常工作

零代码训练营第七期本月启动,现正开放报名!

明道云

再添神器!Paddle.js 发布 OCR SDK

百度开发者中心

OCR paddle.js

2021年11月国产数据库大事记

墨天轮

数据库 opengauss TiDB oceanbase 国产数据库

Linux一学就会之重定向和文件的查找(Linux下一切皆文件)

学神来啦

Linux 运维 linux云计算 linux一学就会

产品经理进阶(一)Web APP UI一致性设计

No Silver Bullet

产品经理 12月日更

保险行业办理过等保选择哪家好?有成功案例吗?

行云管家

网络安全 等保 等级保护 等保2.0

EasyRecovery如何恢复ps的psd文件

淋雨

数据恢复 EasyRecovery

「MySQL」数据库备份和还原

恒生LIGHT云社区

MySQL 数据库 MySQL 数据库

结算中心全国集中化支撑解决之道

鲸品堂

2600亿!全球最大中文单体模型鹏城-百度·文心发布

百度大脑

人工智能

羊肉泡馍我们来了,尚硅谷西安分校设立首期特惠

编程江湖

编程开发

【喜讯】尚硅谷西安分校成立啦

@零度

尚硅谷 西安分校成立

【混合云小知识】混合云应用场景包含哪些?

行云管家

云计算 混合云

EMQ 映云科技走进高校,与浙大城市学院联合促进物联网人才培养

EMQ映云科技

物联网 mqtt

探索圈外的世界 | GTLC 全球技术领导力峰会·厦门站圆满收官

TGO鲲鹏会

区块链 方法论 技术管理 GTLC

热门盘点:企业该如何对待低代码?应不应该选择低代码?

优秀

低代码

埃文科技上榜CCSIP 2021中国网络安全产业全景图3大安全模块

郑州埃文科技

网络安全 ip技术 全景图

华为云应用构建技术实践精选集

华为云开发者联盟

云计算 华为云 内容合集 技术专题合集 应用构建

java序列化实现原理和深度分析

Java个体户

Java

缓存数据的淘汰之路(上)

卢卡多多

28天写作 签约计划第二季 12月日更

The Data Way Vol.7|从故事里寻找开源的『内核』

SphereEx

Apache 开源 播客 Meetup SphereEx

🍃【Spring专题】「实战系列」spring注解@ConditionalOnExpression详细使用说明

码界西柚

spring Spring Framework Condition 12月日更 ConditionOnExpression

万字详解什么是生成对抗网络GAN

华为云开发者联盟

算法 推荐算法 GAN 强化学习 生成对抗网络

Cypress 基础 - 元素的定位

汪子熙

CSS html Cypress 28天写作 12月日更

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