弱引用表
元素均为弱引用的表
GC时,一个引用类型变量的所有根引用都为弱引用,则被标记为可回收
设置元表的
__mode 字段为’k’, ‘v’ or ‘kv’,表示这个表的键、值或键值都是弱引用类型local a = {} local mt = {__mode = 'k'} setmetatable(a, mt) key = {} a[key] = 1 key = {} a[key] = 2 collectgarbage() for k, v in pairs(a) do print(v) end -- 2 -- 如果不设置metatable则1 2
记忆函数
和动态规划的思想很类似:打表记录相同参数下函数的运行结果
这个结果记录表可以用弱引用表,避免一直存在这太占空间
析构器Finalizer
元方法
__gc 被GC的时候被调用
当GC在同一周期中析构多个对象时,会按照对象被标记为需要析构处理的顺序 逆序 调用这些对象的析构器,该顺序和对象的关联关系无关
Lua的GC算法
5.0之前:mark-and-sweep