运行垃圾收集器

时间:2013-08-16 12:14:30

标签: lua

我在mac Mac OS应用程序中运行了许多Lua脚本以及Objective C代码。我的应用程序的内存占用量持续增长。因此,我决定定期从我的Lua脚本中调用collectgarbage函数。因为,我是Lua的新手,我不确定是否应该在每个脚本中调用它,或者从任何脚本调用它都没问题,即它是从所有打开的Lua状态收集垃圾还是仅从与当前关联的状态收集垃圾Lua档案?

2 个答案:

答案 0 :(得分:1)

与Lua中的所有内容一样,内存属于每个Lua状态。不同的Lua状态完全分开,并且没有(直接)方式在一个Lua状态中完成任何事情以影响另一个Lua状态的内容。

另外,Lua并不真正知道“脚本”是什么。或者一个文件。只有解释器恰好正在执行的代码。它肯定不会在每个“脚本”的基础上跟踪内存。

collectgarbage因此可以在它可以的级别上工作:它从当前的Lua状态收集垃圾。

答案 1 :(得分:0)

如果您可以访问所有Lua状态,则可以使用lua_close函数来收集您传递给Lua状态的所有垃圾作为参数。

void lua_close (lua_State *L);

C API的另一个替代方法是lua_gc方法。

int lua_gc (lua_State *L, int what, int data);

无论哪种方式,您都需要将状态传递给它,垃圾收集器只会清除该特定状态使用的动态内存。

有关详细信息,请在手册中查找lua_closelua_g c

http://www.lua.org/manual/5.2/manual.html