请参阅以下示例:
local t = {}
t[1] = function() return 3 end
t[2] = function() return 2 end
t[3] = 3
local a = t[1]
local b = t
t[1] = nil
collectgarbage("collect") --reclaim memory
print(a) --function
print(b[1]) -- nil
print(b[2]) --function
print(b[3]) --3
为什么我仍然可以打印'a'而不是'b [1]'? 另外,我在lua参考手册中看到“垃圾收集器忽略了弱引用”。如何定义“忽略”?
答案 0 :(得分:3)
赋值(=
)在Lua中赋值,它从不创建别名。
因此,在您将a
分配给nil
之后,b[1]
与b[1]
分配a
根本不相关。
关于您的GC问题:
您的代码段中只有强引用,没有弱引用。
并且忽略意味着在确定生命对象时不会遵循。当然,如果宣布目标无法到达,则为nil
Lua有一个跟踪GC,而不是一个引用计数的GC,它会出现循环引用的问题。