【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

一看就懂,一学就会的Raft解析

爱德华

raft PAXOS 共识算法 深入理解分布式共识算法

云原生容器高可用运维能力应用

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

几种快速传输大文件的方式

镭速

连接 AI,NebulaGraph Python ORM 项目 Carina 简化 Web 开发

NebulaGraph

Python ORM 图数据库

一文告诉你如何一键复现“TSBS 时序数据库性能基准测试报告”测试结果

TDengine

tdengine 性能测试 时序数据库

官方文档 | 【JVM调优体系】「GC底层调优实战」XPocket为终结性能问题而生—开发指南

洛神灬殇

Java JVM 3月日更 XPocket 技术 优化体系

IM跨平台技术学习(七):得物基于Electron开发客服IM桌面端的技术实践

JackJiang

即时通讯 即时通讯IM

扫盲篇:Java中为啥一个 main 方法就能启动项目?

Java你猿哥

Java JVM ssm Java工程师

百套Web工业组态模板图库(长期更新)

2D3D前端可视化开发

组态软件 工业组态 组态图库 web组态图库 组态界面

深度访谈 NXTF_ 负责人|虚实联动才是通向未来的数字通行证

万事ONES

灵魂拷问:你写的SQL一般有几个JOIN ?​

Java你猿哥

Java sql 后端 ssm join

Nautilus Chain 首个生态基础设施 Poseiswap,公布空投规则

鳄鱼视界

互联网工程师1480道Java面试题及答案整理( 2023年 整理版)

Java你猿哥

Java 面试 面经 春招 Java八股文

如何使用责任链默认优雅地进行参数校验?

做梦都在改BUG

Alibaba官方上线!Java并发编程全彩图册(终极版)GitHub已置顶

做梦都在改BUG

Java 并发编程 多线程 高并发

Linux 的 TCP 连接数量最大不能超过 65535?

Java你猿哥

Java Linux 后端 ssm

Flink 流批一体方案在数禾的实践

Apache Flink

大数据 实时计算 flinkl

字节跳动 Flink 大规模云原生化实践

Apache Flink

大数据 flink 实时计算

基础篇丨链路追踪(Tracing)其实很简单

阿里巴巴云原生

阿里云 云原生 Tracing

专业的RAW图片处理:DxO PhotoLab 6 中文直装版

真大的脸盆

Mac Mac 软件 raw raw图片处理软件 Raw图像处理软件

YRCloudFile V6.10.0 功能新增对 NVIDIA GPUDirect 与回收站的支持

焱融科技

#高性能 #分布式文件存储 #文件存储 #全闪存储 #容器存储

云图说 | MSSI之应用业务模型ABM,搭建业务与技术的数据治理桥梁

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

Nautilus Chain 首个生态基础设施 Poseiswap,公布空投规则

威廉META

面试必问:JVM 如何确定死亡对象?

做梦都在改BUG

Java 面试 JVM

夜莺n9e监控配置支持电话短信报警

外滩运维专家

夜莺监控 电话报警 短信报警 夜莺监控电话

在GitHub首页3分钟被下架!爱奇艺《高并发网关设计》笔记被盗?

做梦都在改BUG

Java 负载均衡 高并发 网关设计

最全金融数据安全政策汇编,你应该需要它!( 附下载 )

极盾科技

数据安全

测试流程规范如何推动落地?

老张

软件测试 目标识别 流程规范

LED显示屏与DLP拼接屏的优缺点分析

Dylan

LED LED显示屏 户外LED显示屏

Github上获赞59.8K的面试神技—1658页《Java面试突击核心讲》

Java你猿哥

Java 架构 面试 面经 春招

普通程序员要成为架构师,需要掌握哪些知识体系?

程序员小毕

Java 面试 程序人生 后端 架构师

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