如何删除Lua模块的所有代码和内存空间

时间:2013-08-07 07:35:52

标签: lua

我有很长时间的飞行计划,它是一名玩家。启动后,它将通过服务器命令从net加载并运行Lua代码。每个代码都有一个唯一的命名模块。

每天都需要加载序列不同的代码(即Lua模块)并运行它们。我担心记忆会在很长一段时间后溢出......

所以,我的问题是:Lua模块可以丢弃吗?不再使用模块我想放弃它。

2 个答案:

答案 0 :(得分:2)

Lua中的模块只是另一个包含所有函数和变量的表。如果将其设置为nil并删除package.loaded中的条目,则应由垃圾收集器清除。

这是一个实现模块卸载的功能: http://lua-users.org/lists/lua-l/2009-03/msg00587.html

答案 1 :(得分:2)

对于用Lua编写的模块,将package.loaded中的条目设置为nil可能会有效。但是,它是一个hack,不应该用于任意模块(尤其是C模块)

来自LuaJIT的开发人员Mike Pall:

  

实际上,即使是卸载任意模块也没有安全的方法   对于普通的Lua。 C模块可以相互依赖和卸载   他们以错误的顺序将造成严重破坏。如果还有一个   带有__gc C函数的userdata并删除共享   来自地址空间的库用上面的方法...猜   会发生什么。

Source

对于您的情况,请考虑不使用modulerequire,而是使用自己的,更简单的系统来利用loadstring

等功能