✏️

GC

Created
Mar 17, 2025 06:23 AM

弱引用表

元素均为弱引用的表
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