写点什么

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

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

关注

评论

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

Oracle 数据恢复一例

wong

oracle windows dbf

linux文件系统-inode学习整理

戈坞昂

Linux inode

实现一个比LongAdder更高性能的计数器有多难?

捉虫大师

Java jdk LongAdder

「Postman教程 」接口测试-2

Megatron7

测试 Postman

回“疫”录(21):你这样做的样子真丑

小天同学

疫情 心理 回忆录 现实纪录 纪实

SQL 生成斐波那契数列

zero

sql 斐波那契 MySQ

在Gitlab-ce的Docker中使用自定义端口

天飞

Docker gitlab

看完这篇 HTTPS,和面试官扯皮就没问题了

苹果看辽宁体育

https

「Postman教程 」功能介绍-1

Megatron7

测试 Postman

奇怪知识点系列:Office 365 CDN 揭秘

手艺人杨柳

Office 365 Microsoft 365 SharePoint Online

程序员的晚餐 | 5 月 19 日 蒜香鸡腿,味道令人惊讶

清远

美食

MacOS 下使用VSCode进行GoLang Test报错

北纬32°

macos vscode Unit Test debug Go 语言

中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)

泡菜小仙

数字化转型 架构设计 技术架构

部门最漂亮的妹子离职了

Geek_6rptuk

团队管理 生涯规划 企业文化 职场

中小型城市商业银行数字化转型实践(三)数据中台建设思路和路径

泡菜小仙

数据中台 数字化转型 数据架构

关于键盘的一些事

BabyKing

vim 缓存 键盘 快捷键 karabiner

2020年5月19日 Java并发编程专题

瑞克与莫迪

Java

中小型城市商业银行数字化转型实践(二)集成关系ESB APIGateway ServiceMesh

泡菜小仙

架构设计 集成架构 ESB

MyBatis支持的jdbcType 枚举类型

Kevin Liao

《零基础学 Java》 FAQ 之 9-Java里的各种数据类型占用多少内存空间

臧萌

Java

你的c++团队还在禁用异常处理吗?

泰伦卢

c c++ C#

比特币是新生事物吗?

Haiyung

比特币

如何设计一款“高可用高性能”的发号器?

捉虫大师

Java 高可用 发号器 高性能 raft

谁能让你安稳

Neco.W

工作 稳定性 努力工作

生活就是这么讽刺,有时候你嘲笑他,有时候你想成为他......

代码诗人

中年危机 文艺 短片小说

Kubernetes时代的云容器平台:各家云产品模式逐渐丰富

韩超

腾讯云 阿里云 Kubernetes IaaS PaaS

Android | Tangram动态页面之路(四)vlayout原理

哈利迪

android

从Deepl说起,聊一聊未来的“安全职业”

孤岛旭日

程序员 AI 职业

我的读书笔记-樊登读书法

lmymirror

学习 读书笔记 方法论 读书方式

看得懂的区块链及智能合约概念

石君

区块链 智能合约

520 我用算法帮女朋友的闺蜜选男友

cherubines

Python 算法 数据分析 蒙特卡洛 最优解

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