Lua中的引用计数是什么?

时间:2015-01-29 08:51:23

标签: lua garbage-collection reference-counting

请参阅以下示例:

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参考手册中看到“垃圾收集器忽略了弱引用”。如何定义“忽略”?

1 个答案:

答案 0 :(得分:3)

赋值(=)在Lua中赋值,它从不创建别名。

因此,在您将a分配给nil之后,b[1]b[1]分配a根本不相关。


关于您的GC问题:

您的代码段中只有强引用,没有弱引用。
并且忽略意味着在确定生命对象时不会遵循。当然,如果宣布目标无法到达,则为nil Lua有一个跟踪GC,而不是一个引用计数的GC,它会出现循环引用的问题。