记录当前项目lua内存泄露问题

这段时间事情不多 我知道我们项目重登会有内存泄露的问题 想趁没事干研究研究 提升下知识水平
参考了好几篇大佬的教材,学到很多东西
http://www.cnblogs.com/yaukey/p/unity_lua_memory_leak_trace.html
http://shavingha.blog.163.com/blog/static/10378336200822134554488/
http://blog.csdn.net/shimazhuge/article/details/43794347
http://blog.codingnow.com/2012/12/lua_snapshot.html
https://github.com/cloudwu/lua-snapshot/blob/master/snapshot.c
http://stackoverflow.com/questions/11366693/lua-count-the-no-of-references-to-a-table
http://blog.csdn.net/xocoder/article/details/42685685
我按照大佬们博客中提示,分别遍历了_G和debug.getregistry注册表底下的function,table,upvalue,userdata,发现每次切换_G下的table暴增到2000多个,打印出名字发现都是ui的类,才明白这跟我们项目的框架有关,现在的框架下每个功能模块有一个模块文件,模块文件一开始游戏就被载入 然后在主控制那个文件那里会调用每个模块的载入其他文件的函数,ui类就算没使用也是一开始就生成类,这里之前说错了,正是因为这样,游戏切换账号内存增加是很正常的,xxx = xxx or basexx(basexx) 这种创建类的模式不会导致全局表重复创建类,这也是这种写法的原因,所以内存泄露不是这里导致的,一开始切换内存增加最多可能是没有GC,因为GC是设了周期的,手动GC一下就变小了,但是往后的每次切换都有轻微内存泄露,我遍历也没发现问题,后来看到文章说function(…)这种写法也会导致内存泄露,所以猜想可能是有类似不规范的写法导致了那轻微的泄露。

第三次编辑这篇记录,补充第二次编辑遗漏的东西,这次找到了真正修改完lua泄露后在pc上切换账号内存显示还会变大的原因了
之前修改完lua内存泄露以后,切换账号查看lua内存,只有非常轻微,轻微到可以忽略的泄露了,但是同事在打ios包时无意中通过xcode发现有内存泄露,后来我在pc上切换账号,发现内存确实还是有增加,之前一直没发现原因,因为在xcode自带instrument也没显示出哪里泄露了,又因为之前lua代码有泄露,我直接以为还是lua代码有泄露,然后一直没发现原因,不过今天突然想到windows上的任务管理器查看的内存不是lua的吧,然后通过vld运行c++代码,发现了任务管理器内存变大的原因。
1
这里写图片描述
log上不止这两个地方,还有好几处,这就是修改了lua泄露后在pc上看还有泄露的原因,不过由于点进去看发现很多地方都是很久以前的代码,可能是公司很多项目公用的底层代码,项目又很稳定我就不便做修改了,毕竟运营了2年要是问题严重也轮不到我来检查了,就放着吧。

猜你喜欢

转载自blog.csdn.net/x2345com/article/details/60150371