Go语言中GC(垃圾回收回收机制)三色标记与混合写屏障
Go语言的GC采用了三色标记与混合写屏障技术。
三色标记:
- 初始阶段,整个堆都被标记为黑色,表示这些对象正在被使用。
- 然后从根对象开始遍历整个对象图,将访问到的对象标记为灰色,表示这些对象正在被遍历,但还没有完全处理完毕。
- 在遍历完成后,将黑色对象的所有引用清零,变为白色,表示这些对象没有任何引用了。
混合写屏障:
- 当一个对象要被写入时(即对象的引用要被更新),GC会暂停所有线程,这就是全屏障。
- 然后,GC会暂停当前线程,并开始混合写屏障,即先更新引用,再更新指针。这样做可以避免在写入指针时其他线程看到不一致的数据。
这两种技术结合使用,可以有效地在应用运行时不停止地进行垃圾回收。
评论已关闭