大佬教程收集整理的这篇文章主要介绍了每天一点点----项目中關鍵字 “ collectgarbage”,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. toString(msg) .. "\n")
-- print(debug.traceBACk())
print("----------------------------------------")
end
local function main()
@H_944_14@-- avoid memory leak
collectgarbage("setpause",100)
collectgarbage("setstepmul",5000)
-- require('mobdebug').start()
game = require("game");
game:startup();
end
xpcall(main,__G__TRACKBACK__)@H_944_14@
@H_944_14@
@H_944_14@
1.collectgarbage 关键词 -- 英文(garbage 垃圾 collect 收集) -- 简称 GC@H_944_14@
collectgarbage的使用方法是collectgarbage("AAA"),AAA 不同的值代表的意思也不一样@H_944_14@
@H_944_14@
2.為什麼下面這兩句話要放在main的開頭?@H_944_14@
collectgarbage("setpause",5000)
@H_944_14@
網上搜索的結果展示@H_944_14@
看两段代码 ,他们最大的区别就是一个是全局变量,另一个是本地局部变量。@H_944_14@
跟调用test2前相比,即使Lua进行了内存回收,内存却不会将下来看来@H_944_14@,@H_944_14@这@H_944_14@300K(25906K-25620K)@H_944_14@内存@H_944_14@由于已放到了全局函数中,是永远没有机会被回收到了@H_944_14@!
总结一:如何监测Lua的编程产生内存泄露:
1.针对会产生泄露的函数,先调用collectgarbage("count"),取得最初的内存使用
2.函数调用后,collectgarbage("collect")进行收集,并使用COllectgarbage("count")再取得当前内存,最后记录两次的使用差
3.从test1的收集可看到,collectgarbage("collect")被调用,并不保证一次成功,所以,大可以调用多次
总结二:如何避免Lua应用中出现的内存使用过大行为:
1.当然是代码实现不出现泄露,(废话*&%$()
2.在测试中,其实还发现,Lua中被分配的内存,其实并不会自动回收(个人估计要么就是Lua虚拟机没有做这个事情,要么就是回收的时机是在C层),为了避免内存过大,应用的运行时,可能需要定期的(调用collectgarbage("collect"),又或者collectgarbage("step"))进行显式回收。
作为开发人员,我们确实有过让Lua自动内存管理。为此,有以下几种方法。@H_944_14@
以上是大佬教程为你收集整理的每天一点点----项目中關鍵字 “ collectgarbage”全部内容,希望文章能够帮你解决每天一点点----项目中關鍵字 “ collectgarbage”所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。