写点什么

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

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

关注

评论

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

3个办公网站,助你又快又好地搞定工作总结ppt!

彭宏豪95

效率工具 职场 PPT 效率办公 AI生成PPT

一键登录,打造华为账号便捷新体验

HarmonyOS SDK

HarmonyOS

会声会影发光字体制作 会声会影字体怎么淡化退出 视频剪辑制作教程

阿拉灯神丁

字幕 会声会影2023 视频剪辑软件下载 视频剪辑软件

OpenTiny HUICharts 正式开源发布,一个简单、易上手的图表组件库

OpenTiny社区

Vue js eCharts OpenTiny

如何判断IP地址属于住宅IP还是机房IP

IPIDEA全球HTTP

代理IP

蔚来汽车 x TiDB丨单表超 20 亿条数据,从 MySQL 到 TiDB 的迁移思考与实践

PingCAP

MySQL TiDB 蔚来

沧州杨埕水库:创建巡检“二维码”,为安全管理赋能

草料二维码

安全管理 设备管理 草料二维码 设备巡检二维码 设备巡检系统

ETL数据集成丨将GreenPlum数据同步至Doris数仓

谷云科技RestCloud

Doris greenplum 数据同步 ETL 数据集成工具

打印报表--客户订单打印报表

小智数据

小智开源报表 小智报表常见示例 纯前端js报表控件 类excel样式报表 客户订单打印报表

TCL 实业 x TiDB丨从分销转向零售,如何考虑中台建设和数据库选型?

PingCAP

TCL 营销中台 实业

跨平台数据同步:京东商品详情API的多平台支持

技术冰糖葫芦

api 货币化 API 文档 API 测试 pinduoduo API

JavaScript 中的闭包和事件委托

不在线第一只蜗牛

JavaScript 前端

淘宝商品详情API深度解读:商品标签与分类的洞察

代码忍者

API API 文档 API 测试

【YashanDB知识库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found

YashanDB

yashandb 崖山数据库 崖山DB

腾讯云联合中科软发布 “保险行业一体化大数据解决方案” 共筑保司数据基座

腾讯云大数据

腾讯云 wedata

【Java】Jsoup 解析HTML报告

不在线第一只蜗牛

Java html

淘宝天猫商品详情API:商品参数对比与选择

技术冰糖葫芦

API api 货币化 API 文档 API 测试

软件测试学习笔记丨BlueOcean 安装与使用

测试人

软件测试

AI大模型在业务受理的智能化实践和探索

鲸品堂

运营商 大模型 企业服务大模型

一文弄懂Go语言的Context包,值得收藏!

左诗右码

Go

Web3 游戏周报(7.28 - 8.03)

Footprint Analytics

链游

2025第十三届中国电子信息博览会(CITE深圳电子展)

AIOTE智博会

电子展 深圳电子展 电子信息展

TiKV Raft 快照全流程丨TiKV 源码解读(二十二)

PingCAP

数据库 TiKV 源码解读 TiKV

电车风噪大?巧妙利用空气动力学和仿真技术,解决风噪影响

Altair RapidMiner

汽车 仿真 汽车仿真 altair 新能源车

基于人工智能的代码分析与 Bug 检测实战

霍格沃兹测试开发学社

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