golang学习笔记——三色标记法、强三色不变式、弱三色不变式、插入屏障、删除屏障、混合写屏障

三色标记法

Golang的三色标记法(Tri-color Marking)是一种用于垃圾回收(Garbage Collection, GC)的算法,它主要用于标记和回收不再使用的内存对象。该算法通过将对象分为三种颜色——白色、灰色和黑色,来追踪和确定哪些对象是可达的(reachable),哪些是不可达的(unreachable)即垃圾对象,从而进行回收。以下是关于Golang三色标记法的详细解释:

一、三色标记法的基本概念

三色标记法将对象分为以下三种颜色

  1. 白色对象:潜在的垃圾对象,表示这些对象尚未被垃圾回收器访问到。在垃圾回收开始时,所有对象都被视为白色。当回收过程结束后,如果某些对象仍然保持为白色,则它们被认为是不可达的,即垃圾对象,可以被回收。

  2. 灰色对象:表示这些对象已被垃圾回收器访问到,但回收器还需要对其中的一个或多个指针进行扫描,因为它们可能还指向白色对象。灰色对象类似于一个“波面”,它们需要被进一步处理以确定其引用的对象是否可达。

  3. 黑色对象:表示这些对象已被垃圾回收器完全访问并扫描过,其中所有字段都已被检查。黑色对象中的任何一个指针都不可能直接指向白色对象,它们被认为是活跃的对象,不需要被回收。

二、三色标记法的执行过程

三色标记法的执行过程大致可以分为以下几个阶段

  1. 标记准备阶段(Mark Setup)

    • 在此阶段,垃圾回收器会进行一些准备工作,如启用写屏障(write barrier)等。写屏障是一种在对象引用发生变化时插入的额外操作,用于确保垃圾回收的正确性。
  2. 标记阶段(Marking)

    • 从根对象(如全局变量、执行栈上的对象等)开始,将这些根对象标记为灰色,并放入待处理的灰色集合中。
    • 从待处理的灰色集合中取出一个灰色对象,将其标记为黑色,并将其所有引用的白色对象标记为灰色,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值