美文网首页
Go垃圾回收机制

Go垃圾回收机制

作者: 晚歌歌 | 来源:发表于2024-09-28 16:08 被阅读0次

Go 语言的垃圾回收机制自其发布以来经历了多次改进和优化。每个版本都引入了新的特性和改进,以提高性能、减少停顿时间和增强用户体验。以下是 Go 语言在不同版本中垃圾回收机制的主要变化和发展:

Go 1.0 (2009)

• 基本实现: Go 1.0 版本中的垃圾回收器是一个简单的标记-清除(Mark and Sweep)算法。
• STW (Stop The World): 在垃圾回收过程中,整个程序会被暂停,这会导致显著的停顿时间。

Go 1.3 (2014)

• 并行清扫: 垃圾回收过程中的清扫阶段被并行化,减少了停顿时间。
• 分代收集: 引入了分代收集的概念,将对象分为新生代和老年代,对新生代进行更频繁的回收,提高了整体效率。

Go 1.5 (2015)

并发标记和并发清除

Go 的垃圾回收器在标记和清除阶段都实现了并发执行,以减少停顿时间(Stop The World, STW)。

并发标记 (Concurrent Marking):

•在标记阶段,GC 线程与应用程序线程并发运行。
•使用写屏障(Write Barrier)来跟踪在标记过程中新创建或修改的对象,确保这些对象不会被错误地回收。

并发清除 (Concurrent Sweeping):

•在清除阶段,GC 线程与应用程序线程并发运行。
•清除阶段负责释放不再使用的内存。

三色标记法

引入了三色标记算法,这是一种高效的并发垃圾回收算法。
Go 的垃圾回收主要基于三色标记-清除算法。这种算法将对象分为三种颜色:白色、灰色和黑色。
•白色 (White): 未被扫描的对象,可能是垃圾。
•灰色 (Gray): 已被扫描但其子对象尚未被扫描的对象。
•黑色 (Black): 已被完全扫描的对象,其所有子对象也已被扫描。

工作原理

  1. 初始状态: 所有对象都是白色的。
  2. 根对象扫描: 从根对象(如全局变量、栈上的局部变量等)开始,将这些对象标记为灰色。
  3. 扫描灰色对象: 将灰色对象的所有引用对象标记为灰色,然后将该对象标记为黑色。
  4. 重复步骤 3: 直到没有灰色对象为止。
  5. 清理白色对象: 最终,所有白色对象都被视为垃圾并被回收。

混合写屏障 (Hybrid Write Barrier)

为了确保并发标记的正确性,Go 引入了混合写屏障技术。写屏障是一种在写操作时插入的代码片段,用于记录和处理对象的变化,以保证垃圾回收的准确性。

Dijkstra 写屏障:

•用于记录新分配的对象,确保它们不会被错误地回收。
•当一个对象从黑色指向白色对象时,需要将白色对象重新标记为灰色,以便后续扫描。

Yuasa 写屏障:

•用于处理从白色对象到黑色对象的指针更新。
•通过记录这些更新,确保黑色对象的子对象不会被错误地回收。

总结

Go语言采用了一种非阻塞、并行的垃圾回收机制。它的设计目标是最大限度地减少GC对应用程序性能的影响,同时保证及时回收不再使用的内存。Go的GC机制主要由以下几个部分组成:

  • 三色标记法:一种经典的垃圾回收算法,用于标记和清除不再使用的对象。
  • 写屏障:一种机制,用于在垃圾回收期间跟踪对象引用的变化。
  • 并发GC:GC和应用程序的其他部分并发运行,减少GC暂停时间。

相关文章

  • 现代的垃圾回收机制(Go 垃圾回收机制概述)

    现代的垃圾回收机制(Go 垃圾回收机制概述) 关于 Go GC策略的见解 细节你可以到 Hacker News 和...

  • JavaScript的垃圾回收机制

    大纲 1、认识垃圾回收机制2、垃圾回收机制的原理3、垃圾回收机制的标记策略4、垃圾回收机制与内存管理 1、认识垃圾...

  • JS垃圾回收机制(内存问题)

    垃圾收集机制理解 垃圾收集机制:释放无用的数据,回收内存。 垃圾收集机制分类:1)自动回收 2)手动回收 垃圾收集...

  • JVM垃圾回收机制

    JVM垃圾回收 整体思维导图 带着问题理解JVM垃圾回收机制 Java为什么需要垃圾回收机制; 回收哪部分垃圾; ...

  • Go垃圾回收机制

    上一篇分析了Go的内存分配机制,本文将简单分析一下Go的垃圾回收机制。本文是《循序渐进go语言》第五篇,本文也是刚...

  • Go语言——垃圾回收GC

    Go语言——垃圾回收GC 参考: Go 垃圾回收原理 Golang源码探索(三) GC的实现原理 Getting ...

  • 垃圾回收机制

    垃圾回收机制—GC Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就...

  • javascript的垃圾回收机制与内存管理

    一、垃圾回收机制—GCJavaScript具有自动垃圾回收机制(GC:Garbage Collecation),也...

  • Java垃圾回收详解

    深入理解 Java 垃圾回收机制 深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java 语言中一个...

  • 常见垃圾回收算法

    什么是垃圾回收(GC) 垃圾回收机制是一种找到内存中的垃圾将其释放并回收空间的机制 常见的垃圾回收算法 引用计数法...

网友评论

      本文标题:Go垃圾回收机制

      本文链接:https://www.haomeiwen.com/subject/rkxrrjtx.html