GC垃圾回收的时候Stop-The-World (STW)是为了做什么?

提问者:帅平 问题分类:面试刷题
GC垃圾回收的时候Stop-The-World (STW)是为了做什么?
1 个回答
最终是我淘汰出局
最终是我淘汰出局
Stop-The-World (STW) 的主要作用是确保在关键的垃圾回收步骤中,堆中的对象不会被应用程序线程修改,从而保证GC操作的准确性和一致性。Go的GC会在以下两个关键时刻触发STW:
1、初始标记(Initial Mark):
在这个非常短暂的STW阶段,所有应用程序线程都会暂停,以确保根集合(如栈、全局变量等)中的所有引用都被正确地标记为存活。这是必要的,因为根集合中的对象是垃圾回收的起点,如果这些对象在标记过程中发生变化,可能会导致一些存活对象被错误地标记为垃圾。
2、最终清理(Final Cleanup):
在垃圾回收的最后阶段,GC会再次进入STW状态,以完成最后的清理工作,包括释放已标记为垃圾的对象所占用的内存,并重置GC的状态以准备下一轮的回收。这确保了在清理过程中没有新的引用指向这些即将被回收的对象,避免了悬挂指针的问题。
通过这两个短暂的STW阶段,Go的GC能够确保标记和清理过程的准确性,同时尽量减少对应用程序性能的影响。
发布于:4个月前 (12-20) IP属地:四川省
我来回答