2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Go 1.6 将进一步改进垃圾收集器

  • 2015-09-11
  • 本文字数:997 字

    阅读完需:约 3 分钟

尽管 Go 1.5 刚刚发布,仍然相对较新,但是 Go 团队已经在致力于改进其新的低延迟并发垃圾收集器,希望 Go 更适合新的应用领域。Google 工程师 Austin Clements Rick Hudson 如是

Go 1.5 用新的垃圾收集器代替了原来的STW(stop-the-world) GC,解决了延迟问题。当负载较重时,每50ms,新的GC 的活动时间可以控制在10ms 以下,从而使Go 程序在一般情况下能运行得更快些。在更极端的情况下,停顿可以从300ms 降到4ms

Go 1.6 的目标是进一步稳定 GC,并在以下几个方面做出改进:

  • 状态协调(State coordination):Go 1.5 GC 有个主要瓶颈是从 Go 1.4 继承来的,源自其集中式的 GC 协调器(coordinator),这是一个单独的 goroutine,它会将工作进一步分派给 worker goroutine 去完成。一种解决方案是用去中心化的状态机代替集中式协调器。这样修改有个额外的好处,使得重新设计标记完成屏障(mark completion barrier)成为可能,因为它已经变得非常凌乱,而且性能很差。
  • 信用系统(Credit system):Go 1.5 在两个不同的地方使用了一个信用系统:一个是确保清扫(sweeping)在一个 GC 周期和下一次触发堆操作(the next heap trigger)之间完成,一个是确保扫描(scanning)在触发堆操作(an heap trigger)和随后实现堆处理目标之间完成。改进信用系统的一种建议方法是,使其操作总是在 black 阶段进行,以避免未完成的分配操作进入下一个 GC 周期。
  • 标记结束(Mark termination):根据 Clements 和 Hudson 的介绍,在 Go 1.5 中,标记结束阶段是停顿时间的大头。这里的目标是尝试并确保大部分应用可以在 10ms 停顿的阈值下运行,这也是 Go 1.5 在很多情况下已经实现了的。希望所做修改的复杂度较低或中等,比如把 finalizer 扫描从标记结束阶段移到并发扫描,这样对于每 1GB 大小的堆,应该可以节省 1ms,以及去掉一个成本很高的计数循环,对于较大的堆,这个循环占去了标记阶段的另外一半。
  • sweeper 和 scavenger:某些程序会在 sweeper 上消耗大量时间,在这上面投入些精力,应该有性能改进。一个非常激进的方案是完全去掉 sweeper。还有一个不那么激进的方案,可以在 GC 阶段最后,尽早释放较大的对象,并且在所有的系统上支持 scavenger,不管物理页面是多大。

上面只是对计划所做改进的一个概览,欲全面了解,可以阅读原始文档。文档中还有进一步指向 GitHub issues 的链接,这些 issues 记录 了每个改变背后的理由以及建议方案。

2015-09-11 16:443472
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

跨架构平台在云计算中的应用

天翼云开发者社区

云计算 架构

什么是算力网络

天翼云开发者社区

云计算 边缘计算 算力网络

探秘AI算力革命与低代码平台:引领人工智能狂潮

不在线第一只蜗牛

低代码 数智化 AI算力

探索支付宝云开发,开启一段100ms的神奇旅程!

TRaaS

支付宝小程序 云开发

唯一入选中国厂商!灵雀云获Gartner® 首份《DevOps平台魔力象限报告》“荣誉提及”

York

容器 DevOps 云原生 Gartner 平台工程

如何通过场景规划帮助企业实现全面预算管理?

智达方通

智达方通 全面预算管理 财务规划和分析 财务规划与预测 全面预算管理系统

低代码平台的核心能力有哪些?

力软低代码开发平台

Serverless函数计算介绍

天翼云开发者社区

云计算 函数计算

视觉系统对自动驾驶至关重要|数据堂

数据堂

SQL 优化(一):慎用 SQL 函数

hungxy

Java MySQL 后端

教学实训模块升级,助力应用型数据科学人才培养|ModelWhale 版本更新

ModelWhale

数据分析 大模型 教学实训 在线编程 云课堂

接口测试|Fiddler界面工具栏介绍(三)

霍格沃兹测试开发学社

接口测试|Fiddler会话栏中添加IP列

霍格沃兹测试开发学社

软件开发不需要会编码,谈谈我的开发捷径

互联网工科生

软件开发 低代码 开发

分享一个在Reddit上保存视频到手机相册的办法真的YYDS!reddit video downloader!

frank

面向对象设计的逆向建模方法和开源工具

高鹏

Java 开源 架构 DDD 架构设计

机遇与挑战——超级自动化产品的国产化替代已成为大势所趋

九科Ninetech

Selenium 中并行测试的重要性

FunTester

聊聊信仰的力量

互联网工科生

程序员 信仰

重新初始化k8s集群

tiandizhiguai

云计算 云原生 k8s

完全自动驾驶车辆何时才能成为现实

数据堂

接口测试|Fiddler抓包设置及证书配置

霍格沃兹测试开发学社

接口测试|Fiddler设置手机抓包

霍格沃兹测试开发学社

接口测试|Fiddler弱网测试

霍格沃兹测试开发学社

何时使用Kafka而不是RabbitMQ

越长大越悲伤

Kafk Rabbit MQ 消息列队

2024深圳电子展,中国国际电子信息博览会(CITE电博会)

AIOTE智博会

电子展

Go 1.6将进一步改进垃圾收集器_语言 & 开发_Sergio De Simone_InfoQ精选文章