Lua垃圾回收机制 — 标记清除式
- 标记清除式GC算法(跟ue4的垃圾回收机制一样)
- 标记:次执行GC时,先以若干根节点开始,逐个把直接或间接和它们相关的节点都做上标记
- 清除:当标记完成后,遍历整个对象链表,把被标记为需要删除的节点一一删除即可
Lua垃圾回收中的三种颜色 — 用于标记
白色 — 可回收状态
- 如果该对象未被GC标记过则此时白色代表当前对象为待访问状态
白色分为两种情况 - (白1)新创建的对象的初始状态就应该被设定为白色,因为该对象还没有被GC标记到,所以保持初始状态颜色不变,仍然为白色.
- (白1)在回收阶段不会被回收
- (白2)如果该对象在GC标记阶段结束后,仍然为白色则此时白色代表当前对象为可回收状态。
灰色 — 中间状态
- 当前对象为待标记状态
- 当前对象已经被GC访问过,但是
该对象引用的其他对象
还没有被标记
- 当前对象已经被GC访问过,但是
黑色 — 不可回收状态
- 当前对象为已标记状态