Memory Lua表内存泄漏?
我有一个关于lua表使用的内存泄漏问题,代码如下:Memory Lua表内存泄漏?,memory,memory-leaks,lua,lua-table,Memory,Memory Leaks,Lua,Lua Table,我有一个关于lua表使用的内存泄漏问题,代码如下: function workerProc() -- a table holds some objects (userdata, the __gc is implememted correctly) local objs = {createObj(), createObj(), ...} while isWorking() do -- ... local query = {unpack(obj
function workerProc()
-- a table holds some objects (userdata, the __gc is implememted correctly)
local objs = {createObj(), createObj(), ...}
while isWorking() do
-- ...
local query = {unpack(objs)}
repeat
-- ...
table.remove(query, queryIndex)
until #query == 0
sleep(1000)
end
end
表objs
使用一些userdata对象初始化,这些对象在while循环中始终可用,因此不会对这些objs执行gc。在while循环中,使用objs
中的所有元素初始化query
表(使用unpack函数)。在运行脚本时,我发现内存一直在增加,但当我注释掉localquery={unpack(objs)}
时,它就消失了
我不认为这段代码有内存泄漏问题,因为
query
var是本地的,在while循环的每次迭代后都应该不可用,但事实是。有人知道为什么该表占用了内存吗?从您的代码示例判断,您看到的可能解释是gc在循环中没有机会执行完整的收集周期
您可以使用collectgarbage()
在内部循环之后强制执行收集,并查看这是否解决了内存问题:
while isWorking() do
-- ..
local query = {unpack(objs)}
repeat
-- ..
table.remove(query, queryIndex)
until #query == 0
collectgarbage()
sleep(1000)
end
另一种可能是将
localquery
移动到循环外部,并创建一次表,而不是在outter循环的每次迭代中创建一个新表。谢谢!我认为更好的方法是将查询表移出内部循环。