Memory 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

我有一个关于lua表使用的内存泄漏问题,代码如下:

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循环的每次迭代中创建一个新表。

谢谢!我认为更好的方法是将查询表移出内部循环。