接上篇, Lua中的GC采用的是三色垃圾增量回收算法.
因此真正进入singlestep函数之前, 先来简单介绍一下三色垃圾回收算法.
在三色垃圾回收算法有,每个可回收对象都会有”黑”,”白”,”灰”三种颜色. 所有对象刚创建都是白色(这里暂不考虑barrier的效果), 一个完整的GC循环大概如下:
1. GC从根对象开始遍历并为对象标记颜色.(这里需要明确的时,根对象并不是指前面的global_State.allgc, 而是指Lua中的一些全局对象,比如lua_State, 注册表)
2. GC每当发……