Lua 垃圾收集器在收集死对象时做什么?

Lua 垃圾收集器在收集死对象时做什么?,lua,Lua,请遵循我的输入意见(使用Lua 5.3.2 at): 我以为table中的表在用nil分配table后将删除弱值[1],您的代码不会调用collect garbage。 试试这个代码 local t = {} local weakvalues = setmetatable({t},{ __mode = 'v'}) t = nil collectgarbage() collectgarbage() print(#weakvalues); v是值。但在您的情况下,您需要kithink@moteus

请遵循我的输入意见(使用Lua 5.3.2 at):


我以为
table
中的表在用
nil
分配
table
后将删除
弱值[1]
,您的代码不会调用collect garbage。 试试这个代码

local t = {}
local weakvalues = setmetatable({t},{ __mode = 'v'})
t = nil
collectgarbage() collectgarbage()
print(#weakvalues);

v
是值。但在您的情况下,您需要
k
ithink@moteus
'k'
用于弱键…抱歉。你是对的,那意味着我必须手动控制,对吗?为什么还要叫两次呢?它只需一次调用即可工作。具有终结器的值需要两个完整的收集周期,然后才能回收内存(在第一个周期调用它们的
\uu gc
元方法,在第二次运行时释放内存)。大多数时候都不需要它(有时清理一个“无法到达”的对象是不够的),但不知怎的它卡住了。。。
local t = {}
local weakvalues = setmetatable({t},{ __mode = 'v'})
t = nil
collectgarbage() collectgarbage()
print(#weakvalues);