写点什么

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

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

关注

评论

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

码农远程办公指北

大伟

管理规划篇

姜戈

团队管理 团队组织

你的团队是干什么的?

姜戈

团队管理 团队职能

100天从 Python 小白到大神最良心的学习资源!

JackTian

Python GitHub 学习 Python-100-Days Python-Core-50-Courses

突破困局

Neco.W

感悟 工作 创业心态

一致性算法 Raft 简述

架构精进之路

raft 一致性算法

联邦学习与推荐系统

博文视点Broadview

人工智能 大数据 学习 推荐系统

终于,我也到了和Eclipse说再见的时候,难说再见

程序员小跃

Java eclipse IDEA

软件开发生产率改进之我见(二)

清水

软件工程 软件开发 技术管理

源码分析 | Mybatis接口没有实现类为什么可以执行增删改查

小傅哥

Java 源码分析 小傅哥 mybatis 编程思维

你真的会用Mac中的Finder吗

Winann

macos 效率 App Mac

Vol.1 Java初探,新手必看!

pyfn2030

编程 新手指南

数据与广告系列三:合约广告与与衍生的第三方广告数据监控

黄崇远@数据虫巢

数据挖掘 互联网 广告 移动互联网

假如孔乙己是程序员

顿晓

学习 程序员 孔乙己

ARTS week 2

锈蠢刀

Android原生人脸识别Camera2+FaceDetector 快速实现人脸跟踪

sar

揭秘神经拟态计算:缘何成为AI界新宠?

最新动态

栀子花,我们应该像你一样静静绽放

小天同学

个人感想 感悟 日常思考

提升输入效率第一步——切换双拼

dongh11

效率工具 提升效率 生产力 分享 有趣

Spring Security 两种资源放行策略,千万别用错了!

江南一点雨

Java spring springboot springsecurity

你为什么“啃不动”你手中的技术书?

图灵社区

Java Python 算法 HTTP R语言

多线程与线程安全(实例讲解)

YoungZY

Java 多线程 线程安全

点击劫持:无X-Frame-Options头信息(修复)

唯爱

好的软件工程原则

pydata

实现元素等高: Flexbox vs. Grid

寇云

CSS css3

使用<input>标签实现六个格子验证码输入框

AR7

Java vue.js 大前端

redis过期策略和内存淘汰机制

wjchenge

宕机原因千千万,被雷劈了最无奈

田晓旭

你的团队想做出什么成果?

姜戈

团队管理

python实现·十大排序算法之计数排序(Counting Sort)

南风以南

Python 排序算法 计数排序

健身一周年:持续锻炼带来无法想象的改变

小鲸数据

学习 职业 专注 健身

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