2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

架构师训练营第一期-第一周课后-作业一

Copy攻城狮辛酸史:含泪“一分钟”跑通MindSpore的LeNet模型

华为云开发者联盟

学习 程序员 mindspore

同城快递订单系统架构设计方案

周冬辉

餐卡系统设计文档

龙卷风

百度大脑助力旅游场景智能解决方案落地

百度大脑

面试官:哪些场景会产生OOM?怎么解决?

艾小仙

Java 架构 面试 编程语言 JVM

Spring-boot 单元测试

陈靓-哲露

OBS鉴权实现的宝典秘籍,速拿!

华为云开发者联盟

OBS 签名

git的几种实用操作(合并代码与暂存复原代码)

良知犹存

git

跨专业学习6个月,成功上岸阿里|滴滴,分享学习路线供大家参考

小Q

Java 学习 架构 面试 基础

智能门禁的音视频技术应用

anyRTC开发者

音视频 WebRTC 直播 RTC

架构师训练营第一期-第一周课后 - 作业二

HTTP必知必会

陈靓-哲露

实战案例丨GaussDB for DWS如何识别坏味道的SQL

华为云开发者联盟

数据库 sql 算子

Rust闭包的虫洞穿梭

袁承兴

rust 函数式编程 闭包

第一周作业,UML图

等燕归

Java基础知识面试题(2020最新版)

Java架构师迁哥

入行架构师之前,这7项技能你要先了解一下

华为云开发者联盟

架构 架构设计 架构师

QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考

艾小仙

架构 编程语言

Code Like Sync, Works Like Async

滴滴普惠出行

学习笔记丨浮点数探究

Liuchengz.

C语言 基本数据类型

2020年6月最新iOS面试题总结

iOSer

ios 2020 面试 经验总结

食堂就餐卡系统设计 UML 练习

escray

学习 极客大学架构师训练营 UML

卧槽!牛逼了!40K+Star!Mall电商实战项目开源回忆录!附源码、教程合集

学习 程序员 架构师 计算机

当代开发者的好帮手,浅析.NET敏捷开发框架的优势与特点

Philips

敏捷开发 软件开发 .net core 开发工具

JDK15正式发布,划时代的ZGC同时宣布转正

YourBatman

ZGC JDK15

百度大脑事件图谱:洞察复杂世界中的事件知识

百度大脑

分布式系统:数据一致性解决方案

马迪奥

分布式事务 一致性

AWS在线技术峰会2020探班回顾,四大看点不容错过

有只小耳朵

云计算 AI 云原生 金融 医疗

GrowingIO 智能运营产品微前端实践

GrowingIO技术专栏

大前端 智能运营

Apache Pulsar 社区周报|09-05 ~ 09-11

Apache Pulsar

开源 云原生 Apache Pulsar 消息中间件

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