我有很长时间的飞行计划,它是一名玩家。启动后,它将通过服务器命令从net加载并运行Lua代码。每个代码都有一个唯一的命名模块。
每天都需要加载序列不同的代码(即Lua模块)并运行它们。我担心记忆会在很长一段时间后溢出......
所以,我的问题是:Lua模块可以丢弃吗?不再使用模块我想放弃它。
答案 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并删除共享 来自地址空间的库用上面的方法...猜 会发生什么。
对于您的情况,请考虑不使用module
和require
,而是使用自己的,更简单的系统来利用loadstring