Lua垃圾收集表,嵌套表

时间:2009-06-17 04:48:14

标签: memory-management lua lua-table

[我读过Lua手册,但它没有提供可靠的答案。]

假设我有一个Lua Table,充当索引数组:

local myArray = {};
myArray[1] = "Foo";
myArray[2] = "Bar";

如何最好地处理此表?我只是将myArray设置为nil吗?或者我是否必须遍历数组并将每个索引元素设置为nil?

同样地,让我说我有一个Lua表,作为字典:

local myDictionary = {};
myDictionary["key1"] = "Foo";
myDictionary["key2"] = "Bar";

我可以将'myDictionary'设置为nil,还是必须迭代?

最后,我该做什么,内存管理方面,我有嵌套表的地方? e.g。

local myNestedCollection = {};
myNestedCollection[1] = {1, 2, 3};
myNestedCollection[2] = {4, 5, 6};

我是否需要遍历每个子表,将它们设置为nil?谢谢你的帮助。

2 个答案:

答案 0 :(得分:6)

将局部变量设置为nil就足够了;没有必要遍历所有键并将它们设置为nil。根据{{​​3}},Lua使用标记和清除垃圾收集算法。一旦将局部变量设置为nil,其表中的键就变得无法访问,因此垃圾收集器将在下一个集合中收集它们。同样,如果这些对象也是表格,那么它们的密钥也将无法访问,因此它们也将被收集。

答案 1 :(得分:5)

在大多数GC中,当没有对象的引用时,将收集一个对象。将参考链的顶部设置为nil会删除对子项的引用。如果这是唯一的参考,那么将收集孩子。