function test1( ... )
local t = {
name = "t"
}
function t:removeMe( arg )
--collectgarbage()
--print(collectgarbage("count") .. 1)
arg:remove()
--collectgarbage()
--print(collectgarbage("count") .. 3)
end
return t
end
function test( ... )
local t = {
name = "ta",
ut = test1()
}
function t:remove( ... )
self.ut = nil
--collectgarbage()
--print(collectgarbage("count") .. 2)
end
return t
end
function mainTest( ... )
function mainTest( ... )
local bt = test()
local function funct( ... )
local at = test1()
bt.ut = at
end
collectgarbage()
print(collectgarbage("count"))
funct()
print(collectgarbage("count"))
bt.ut:removeMe(bt)
collectgarbage()
print(collectgarbage("count"))
end
end
mainTest()
collectgarbage()
print(collectgarbage("count"))
local t = {
name = "t"
}
function t:removeMe( arg )
--collectgarbage()
--print(collectgarbage("count") .. 1)
arg:remove()
--collectgarbage()
--print(collectgarbage("count") .. 3)
end
return t
end
function test( ... )
local t = {
name = "ta",
ut = test1()
}
function t:remove( ... )
self.ut = nil
--collectgarbage()
--print(collectgarbage("count") .. 2)
end
return t
end
function mainTest( ... )
function mainTest( ... )
local bt = test()
local function funct( ... )
local at = test1()
bt.ut = at
end
collectgarbage()
print(collectgarbage("count"))
funct()
print(collectgarbage("count"))
bt.ut:removeMe(bt)
collectgarbage()
print(collectgarbage("count"))
end
end
mainTest()
collectgarbage()
print(collectgarbage("count"))
输出:
26.2138671875
26.3115234375
26.1162109375
25.9248046875
[Finished in 0.3s]
注释func函数结果:
26.2041015625
26.2041015625
26.1064453125
25.9150390625
问题:
在mainTest生命周期内,期望结果是在第4次collectgarbage时释放内存
加入at,remove前相差约0.1,remove之后相差约0.2,不加入at,remove函数前后相差约0.1,单纯估测at输出值也约0.1(未列出),虽然有误差,但是可以看得出at似乎已经被释放,中间的几个数据因为栈变量的影响意义不大。
如何才能更明确的知道这里有没有内存泄露?