我在多个地方遇到过,人们会调用collectgarbage()两次来完成所有未使用对象的终结。
为什么呢?单次调用不足以完成任务吗?那么三次呢?
当我尝试以下代码(在Lua 5.2上),这个对象就被终结了(意思是:它的__gc
函数被调用)只需要一次对collectgarbage
的调用:
do
local x = setmetatable({},{
__gc = function() print("works") end
})
end
collectgarbage()
os.exit()
这是否意味着只需要一个电话?
__gc
)在对collectgarbage()
的第一次调用结束时运行。然后,对coollectgarbage
的第二次调用只是释放内存(手册:“对象内存在下一个垃圾回收周期中被释放”。PiL:请参见上面的引用)。我的示例(我的问题中的代码)据说“证明”了我对此的理解。但是... - Niccolo M.collectgarbage
上没有调用终结器;请参见“我不得不添加一个更多的collectgarbage()调用”),而第一个链接包含一个评论(由用户)说“[调用]两次确保所有终结器都被调用”(也许这个评论是错误的)。所以我仍然不知所措。 - Niccolo M.__gc
在第一次调用collectgarbage()时被调用,对吗?如果我理解有误,那么我是如何误解引号的呢?(顺便说一句,我确实阅读了你的代码示例。) - Niccolo M.