写点什么

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

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

关注

评论

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

一站式在线打字学习平台-巧手打字通

巧手打字通

键盘 打字练习 打字软件 打字练习软件 打字训练

区块链软件系统开发:从设计到实现的全面指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发

避免故障逃逸最佳实践

FunTester

Lumoz的ZK算力网络,加速以太坊3.0的到来

BlockChain先知

在线甘特图软件值得一试的10款,帮你轻松管理项目

爱吃小舅的鱼

在线甘特图软件

枫清科技高雪峰:从数据到知识,重塑产业智能化的核心驱动力

Fabarta

AI应用 #大模型 生成式 AI 应用 企业 AI 应用

星芒云“1+6+N”数字生态方案

明道云

SD-WAN 助力SaaS应用加速,提升企业办公效率

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商 SaaS应用加速 SD-WAN国际专线

惊艳!全网首份“架构师成长笔记”GitHub狂澜9000星

Summer

Java 编程 程序员 面试 架构师

全面解析SD-WAN组网:提升企业网络效率

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SD-WAN国际专线

数智化转型的隐形翅膀:低代码平台的影响力

EquatorCoco

低代码

零代码赋能港澳企业数字化转型

明道云

是观察者,也是实践者!|华为云开源开发者大前端技术论坛完满结束

OpenTiny社区

OpenTiny TinyVue TinyEngine 前端开源 DevUI

市场规模超 60 亿美元,语音如何改变对话式 AI?

声网

如何动态调试线程池?

江南一点雨

豆包Marscode 课程回顾 | AI 编程课「入门开发者系列」

豆包MarsCode

和鲸Heywhale人工智能通识课解决方案重磅上线!

ModelWhale

Python 人工智能 大数据 教改

Altair 技术助力 Cleveland Golf 打破传统设计局限,实现新款 HiBore XL 球杆强大的功能

Altair RapidMiner

AI 设计 仿真 智能制造 altair

Spring Boot 应用 “Connection is closed” 及 MySQL 空闲超时断开连接解决方案

沉默的老李

springboot MySQL 5.7

来自阿里大佬的洗礼!全网独家的SpringBoot核心文档,讲的太清晰了

Summer

Java 程序员 面试 架构师 架构师大厂

AI测试 前 OpenAI 音频 AI 负责人获投 4000 万,打造情感通用智能;TEN Agent 一键让 Coze Bot 开口对话

声网

文字稿 | MatrixOne2.0.0:AI向量与高可用能力的重磅升级

MatrixOrigin

数据库

基于云主机的ModelArts模型训练实践,让开发环境化繁为简

华为云开发者联盟

容器 模型训练 华为云ModelArts AI 大底座 #docker

无需技术也能开发足球篮球直播软件!体育直播源码助你?

软件开发-梦幻运营部

央视《新闻联播》点赞广域铭岛:为新型工业化提供强劲动能

新消费日报

虚拟化世界,正上演一场「星际穿越」

白洞计划

AI

如何对公司项目人力资源进行管理

爱吃小舅的鱼

人力资源管理

区块链软件系统海外宣发:全球化市场中的策略与实施

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 交易所开发代币开发

如何实现LLM的通用function-calling能力?

快乐非自愿限量之名

LLM

如何建立自己的体育直播平台源码,搭建全流程

熊猫比分大卫

体育赛况资讯直播app开发

为什么ETH 3.0需要Lumoz的ZK算力网络?

石头财经

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