ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

golang 垃圾挥手清除阶段为什么不用STW

2023-11-27 21:38:03  阅读:53  来源: 互联网

标签:


在Go语言中,垃圾回收(Garbage Collection,GC)是通过并发垃圾回收器(concurrent garbage collector)来实现的,而不是使用传统的“停止-复制”或“停止-标记-清扫”方法。

并发垃圾回收器的设计目标是尽可能地减少对应用程序的停顿时间(Stop-The-World,STW)。STW是指在垃圾回收过程中,应用程序的执行被暂停,所有的执行线程都停止工作。STW会导致应用程序的性能下降,因此在设计并发垃圾回收器时,尽可能地减少STW时间是非常重要的。

在垃圾挥手清除阶段,Go语言的并发垃圾回收器会尝试在不停止应用程序的情况下进行垃圾回收操作。它使用了一种叫做“标记-清除”(mark and sweep)的算法,其中标记阶段和清除阶段可以在并发运行的情况下完成。

在标记阶段,垃圾回收器会从根对象(例如全局变量、栈上的对象等)出发,通过可达性分析算法标记出所有的活动对象。这个过程可以在应用程序继续执行的同时进行,不会有明显的STW时间。

在清除阶段,垃圾回收器会清除掉所有未被标记的对象,即非活动对象。这个阶段需要停止应用程序的执行,但是停顿时间较短,并且在清除过程中,还可以对活动对象继续进行分配和使用。

通过并发垃圾回收器的设计,Go语言能够在垃圾挥手清除阶段减少对应用程序的停顿时间和STW的影响。这可以提高应用程序的性能和响应性,并且适用于需要实时性能和低延迟的场景。但是需要注意的是,并发垃圾回收器并不完全消除STW,某些情况下仍然可能发生STW,但是尽量将其减少到最小程度。

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有