Lua基础

  1. Lua垃圾回收机制 — 标记清除式
  2. Lua垃圾回收中的三种颜色 — 用于标记
    1. 白色 — 可回收状态
    2. 灰色 — 中间状态
    3. 黑色 — 不可回收状态

Lua垃圾回收机制 — 标记清除式

  • 标记清除式GC算法(跟ue4的垃圾回收机制一样)
    • 标记:次执行GC时,先以若干根节点开始,逐个把直接或间接和它们相关的节点都做上标记
    • 清除:当标记完成后,遍历整个对象链表,把被标记为需要删除的节点一一删除即可

Lua垃圾回收中的三种颜色 — 用于标记

白色 — 可回收状态

  • 如果该对象未被GC标记过则此时白色代表当前对象为待访问状态
    白色分为两种情况
  • (白1)新创建的对象的初始状态就应该被设定为白色,因为该对象还没有被GC标记到,所以保持初始状态颜色不变,仍然为白色.
    • (白1)在回收阶段不会被回收
  • (白2)如果该对象在GC标记阶段结束后,仍然为白色则此时白色代表当前对象为可回收状态。

灰色 — 中间状态

  • 当前对象为待标记状态
    • 当前对象已经被GC访问过,但是该对象引用的其他对象还没有被标记

黑色 — 不可回收状态

  • 当前对象为已标记状态