首页 > 解决方案 > 有可能像这样在 Lua 中死锁内存吗?

问题描述

这两个表都相互引用,但在函数之外的任何其他地方都没有引用。这些表在调用 f() 后会保留在内存中还是会被垃圾回收?

function f()
     local t1 = {}
     local t2 = {}
     t1[1] = t2
     t2[1] = t1
end

f()

标签: memorymemory-managementmemory-leaksluadeadlock

解决方案


这两个表将被垃圾收集。

t1并且t2是本地f的范围。一旦它们超出范围t1[1]并且t2[1]不再存在。

没有更多对剩下的两个表的引用,因此它们有资格进行垃圾收集。


推荐阅读