MST
星途 面试题库

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

请简要阐述Go语言垃圾回收机制里三色标记法的工作原理,以及它如何标记存活对象和清理垃圾对象。
24.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

三色标记法工作原理

  1. 三色定义
    • 白色:表示尚未被垃圾回收器访问到的对象。在垃圾回收开始阶段,所有对象都是白色。
    • 灰色:表示垃圾回收器已经访问到,但它引用的对象还未全部访问的对象。
    • 黑色:表示垃圾回收器已经访问到,并且其引用的所有对象也都被访问过的对象。
  2. 标记过程
    • 初始阶段:从根对象(如全局变量、栈上的变量等)开始,将根对象标记为灰色,其他对象为白色。
    • 标记阶段:垃圾回收器从灰色对象集合中取出一个灰色对象,将其所有引用的对象标记为灰色(如果这些对象原本是白色),然后将该灰色对象标记为黑色。不断重复这个过程,直到灰色对象集合为空。此时,所有可达对象(存活对象)都被标记为黑色,白色对象即为不可达对象(垃圾对象)。

标记存活对象

通过从根对象出发,沿着对象间的引用关系,将可达对象逐步标记为灰色再到黑色。只要一个对象能通过引用关系从根对象到达,最终就会被标记为黑色,从而被认定为存活对象。

清理垃圾对象

在标记结束后,所有白色对象都是垃圾对象。垃圾回收器会回收这些白色对象所占用的内存空间,将其重新标记为可用内存,供后续程序分配使用。