Google Go 团队的成员 Richard L. Hudson (Rick) 近日在 Go 的官方博客和大家分享了他在2018年6月18日国际内存管理研讨会(ISMM)上发表的主题演讲稿。在过去的25年里,ISMM 一直是发布内存管理和垃圾回收论文的首选场所,而 Rick 也因其在内存管理方面的工作而被大家熟知。

Rick 是内存管理方面的专家,发明了 Train, Sapphire 和 Mississippi Delta 等算法,其中 GC stack maps 算法使得静态类型语言(比如:Modula-3, Java, C# 和 Go)的垃圾回收成为可能。他还发表了很多关于语言运行时内存管理、并发、并行、内存模型、事务内存的文章。Rick 作为 Google Go 团队的一员,负责 Go 的 GC 和运行时的问题。

Risk 在演讲稿中先是介绍了 Go GC 取得的成功。

Go 的应用程序中有数十万个堆栈(stacks),它们由 Go scheduler 调度程序管理,并总是在 GC safepoints 处被抢占。Go scheduler 调度程序将 Go routines 多路复用到 OS 线程上,希望每个 HW 线程使用一个 OS 线程来运行。通过复制它们并更新堆栈中的指针来管理堆栈及其大小,这是一个本地操作,因此它可以很好地扩展。

Go 语言包含两大可调节的方法来控制 GC,一个是 SetGCPercent,另一个则是 SetMaxHeap。前者可以调整你想要使用多少 CPU 以及你想要使用多少内存。后者尚未发布但正在内部使用和评估,它允许程序员设置最大的堆内存大小应该是多少,MaxHeap 还提供了更多的调度灵活性,运行时(runtime)可以将堆的大小调整为 MaxHeap。

而对于 Go 语言的 GC 延迟问题,开发团队为解决它们付出了巨大的心血。从2014年开始,最初的计划是做一个无 read barrier 的并发复制GC,因为读取的开销存在很大的不确定性,所以 Go 想要避免它们。

但当时由于编译器的性能限制所在,后来他们放弃了实现“复制”部分。

然后 Risk 谈到了最终推动 GC 延迟问题走向成功的 GC Pacer,它确定何时最佳地启动 GC 循环,当然它做的远不止这些,这只是基本方法。

谈到成功,自然也会有失败。Risk 和大家分享了类似 ROC(Request Oriented Collecter) 这种方案的失败尝试,他们采用 ROC 方案后,发现这反而降低了 write barrier 的速度。

谈到 Go 语言的未来方向方面,Risk 表示不打算增加 GC API surface,现在已经很合适,并且没有一个应用程序重要到足以让他们添加新标志。他们还将研究如何改进已经非常好的逃逸分析并优化 Go 的“面向价值(value-oriented)”编程。不仅在编程中,还包括为用户提供的工具中。在算法上,将关注设计空间的一些部分。

最后,Risk 表示希望摩尔定律在接下来的5年中能更好的体现在 RAM 而不是 CPU。

更多内容请查看原文 https://blog.golang.org/ismmkeynote

Go 语言的垃圾回收演化历程:垃圾回收和运行时问题相关推荐

  1. c++ 多线程 垃圾回收器_JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)...

    一. 技术背景你要了解吧 按照套路是要先装装X,谈谈JVM垃圾回收的前世今生的.说起垃圾回收(GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史比Java久远,早在1960年L ...

  2. 垃圾回收算法以及垃圾回收器_什么是垃圾回收?

    垃圾回收算法以及垃圾回收器 以下是我们的垃圾收集手册中的一个示例,该手册将在接下来的几周内发布. 同时,花点时间熟悉垃圾收集的基础知识-这将是本书的第一章. 乍一看,垃圾收集应该处理顾名思义的问题–查 ...

  3. 垃圾回收算法与垃圾回收器

    Java与C++等语言最大的技术区别:自动化的垃圾回收机制(GC) 为什么要了解GC和内存分配策略 1.面试需要 2.GC对应用的性能是有影响的: 3.写代码有好处 栈:栈中的生命周期是跟随线程,所以 ...

  4. 垃圾回收算法_垃圾回收算法有哪些

    垃圾检测通常通过建立一个根对象的集合以及建立一个从这些根对象开始能够触及的对象集合来实现.如果正在执行的程序可以访问到根对象和某个对象之间存在引用路径,这个对象就是可触及的.对于程序来说,根对象总是可 ...

  5. Java对象垃圾回收调用,JVM垃圾回收之哪些对象可以被回收

    1.背景 Java语言相比于C和C++,一个最大的特点就是不需要程序员自己手动去申请和释放内存,这一切交由JVM来完成.在Java中,运行时的数据区域分为程序计数器.Java虚拟机栈.本地方法栈.方法 ...

  6. jvm的类加载和运行时数据区和垃圾回收

    类加载过程 加载(loading) 引导类加载器 扩展类加载器 系统类加载器 1.通过一个类的全限定名获取此类的二进制字节流 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 3.在内 ...

  7. 计算机毕业设计之微信小程序的废品回收类程序 垃圾回收app论文

    摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,废品回收类小程序被用户普遍使用,为方便用户能够 ...

  8. jvm学习第十、十一天、十二天—垃圾回收器1、垃圾回收的相关概述2、 垃圾回收相关算法3、 垃圾回收器

    标题:jvm学习第十.十一天.十二天-垃圾回收器 学习内容: 1.垃圾回收的相关概述 2. 垃圾回收相关算法 3. 垃圾回收器 内容详情: 1.垃圾回收的相关概述 什么是垃圾( Garbage)? 垃 ...

  9. 2 自动内存管理机制(一)运行时数据区域、垃圾回收算法和垃圾回收器

    文章目录 自动内存管理机制(一)运行时数据区域.垃圾回收算法和垃圾回收器 运行时数据区域 垃圾收集算法(方法论) 垃圾收集器(具体实现) 附录 响应时间和吞吐量 参考 自动内存管理机制(一)运行时数据 ...

最新文章

  1. OCA读书笔记(6) - 配置Oracle网络环境
  2. 【NLP】2020深度文本匹配最新进展:精度、速度我都要!
  3. OpenCV检测ArUco板
  4. 华为正式发布鸿蒙智慧屏,5499 元、21999 元,2021 款华为智慧屏 V55/V85 明日 0 点正式开售:搭载鸿蒙系统...
  5. Pandas GroupBy 分组(分割-应用-组合)
  6. 图像处理、语音处理的应用及前沿技术_自主知识产权的2微米级3D视觉相机应用于高精度和高反光物体的缺陷检测...
  7. JS数组的相关操作(循环、查找、过滤、排序等)
  8. 洛谷 题解 P1757 【通天之分组背包】
  9. c语言的程序的基本示例
  10. 黑盒测试的测试方法及其案例
  11. OGRE实现纸娃娃系统
  12. .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  13. 移动端与pc端的区别
  14. 《人格心理学》读书笔记
  15. iTunes 未能备份iphone,因为无法将备份存储在电脑上
  16. 阿里云国际9款免费标签云生成工具
  17. Bootstrap 的基本使用方法
  18. 程序设计方法与技术——C语言 程序设计概述
  19. 什么是线程线程和进程的区别
  20. Go 1.13版本介绍

热门文章

  1. 第十二周项目一-实现复数类中的运算符重载(1)
  2. springboot处理参数再转发请求_SpringBoot图文教程6—SpringBoot中过滤器的使用
  3. 人工智能实践:TensorFlow笔记学习(六)—— 全连接网络实践
  4. 微信小游戏开发教程-游戏实现3
  5. java 一次性输入与输出_Java入门——(7)IO(输入与输出)
  6. 建博客的原因。。。。
  7. 微信公众号自定义菜单跳转小程序
  8. C++入门经典-例9.4-默认模板参数
  9. 几个SQL命令的使用
  10. 分享一个轻型ORM--Dapper选用理由