MST

星途 面试题库

面试题:Go语言垃圾回收机制中三色标记法的基本原理是什么

请详细阐述Go语言垃圾回收机制里三色标记法的三色分别代表什么,以及三色标记法是如何在垃圾回收过程中实现对象的标记和清理的。
12.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

三色含义

  1. 白色:代表尚未被垃圾回收器访问到的对象。在垃圾回收开始阶段,所有对象默认都是白色。如果在垃圾回收结束时,某个对象仍为白色,那么这个对象就会被判定为垃圾,可以被回收。
  2. 灰色:代表已经被垃圾回收器访问到的对象,但是这些对象引用的其他对象还没有被全部访问。灰色对象是垃圾回收器下一步要处理的对象集合。
  3. 黑色:代表已经被垃圾回收器访问到,并且其引用的所有对象也都被访问过的对象。黑色对象在本轮垃圾回收中是安全的,不会被回收。

标记和清理过程

  1. 初始化:在垃圾回收开始时,所有对象都是白色。根对象(例如全局变量、栈上的变量等)会被标记为灰色,放入待处理队列。
  2. 标记阶段
    • 垃圾回收器从灰色队列中取出一个灰色对象,将其标记为黑色。
    • 遍历该黑色对象引用的所有白色对象,将这些白色对象标记为灰色,并放入灰色队列。
    • 重复上述过程,直到灰色队列为空。此时,所有可达对象都被标记为黑色,而白色对象就是不可达对象(垃圾)。
  3. 清理阶段:垃圾回收器会遍历堆内存,回收所有白色对象占用的内存空间,并将这些内存空间标记为可用,供后续程序分配使用。同时,将所有对象重新标记为白色,为下一次垃圾回收做准备。