官方例子spine内存泄露

  • Creator 版本:2.0.9,2.0.10, 2.1.2

  • 目标平台: IOS

  • 详细报错信息,包含调用堆栈:

  • 重现方式:项目示例工程LoadSpine场景

  • 之前哪个版本是正常的 :

  • 手机型号 :iphoneXr模拟器

  • 手机浏览器 :

  • 编辑器操作系统 :mac

  • 编辑器之前是否有其它报错 :

  • 出现概率:必现

  • 额外线索:

使用xcode的 instruments中的 leaks检查内存泄露

然后跑咱们的示例工程里的LoadeSpine场景

下面就是内存泄露的具体信息

现在是项目中spine特别多,进入场景之前会loadRes 一百左右的spine。在安卓内存也就正常的不到百兆不会有问题,在ios上内存会猛增到500兆以上

然后就用官方示例里的spine场景,在2.0.9 2.0.10, 2.1.2上都进行了内存泄露的测试 结果都是一样的

@jare

@panda

已经提交issue了,正在排查~

太谢谢了 十分感谢

麻烦问问大神,解决了会回复我这个帖子吗

我们做了spine的加载与释放测试,并没有出现内存泄漏问题,以真机调试为准,模拟器可能不准确,可能出现GC反应比较慢,但一段事件内内存总可以回复到一个稳定的值。spine-leak-test.zip (239.7 KB)

现在主要的问题是loadRes特别多的spine动画 进行缓存 会特别占用内存 不知道是什么原因

现在主要的问题是loadRes特别多的spine动画 进行缓存 会特别占用内存 不知道是什么原因 不知道咱们官方有类似的测试用例吗

你可以自己通过纹理资源的计算,推出大概的内存占用情况,看下是否合理。

这个demo我在chrome上调试了下,使用devTools的memory heap snapshots,反复加载释放骨骼动画,能看到明显的内存增长,不知道大佬是怎么得出没有内存泄露的结论[暴风哭泣]

这个原先是发布原生做的测试,使用的是打包后的资源,你可以发布web-mobile做下测试,我本地测试时长1分50秒,内存是稳定的,不会出现反复加载释放内存增长情况,由于GC调度原因,Web端的内存走势都会是波浪形的。
web端测试工程 (245.2 KB)
测试视频 (2.7 MB)

感谢回复,是的,在浏览器中测试,发现不会一直增长了,但是打包wechatgame,到真机上测试,内存还是会增加很多(换了大点的spine动画,反复加载释放时长一分钟左右就能涨一百多M),情况和直接用真机连接PC,在真机浏览器预览进行调试是一样的,内存都会持续上涨。

找到问题了,在wechatgame包中,读取json文件会存在内存泄露

只要加上框中的语句就能释放掉了,文件路径/Applications/CocosCreator/Creator/2.4.3/CocosCreator.app/Contents/Resources/builtin/adapters/platforms/wechat/wrapper/fs-utils.js

我用这个例子,在2.4.5上测试,android真机还是mac模拟器,只是没有不断递增而已,如果后面再也不重新加载资源,但过一段内存还是没有回归到最初状态。比如加一个大点的图片,内存涨到120m,后面再也降不下来了。

        var ret = cc.loader.getDependsRecursively(this.pref);
        cc.loader.release(ret);

        this.pref.decRef();
        this.pref = null;
        
        jsb.garbageCollect();

那如果有很多个不同的spine(纹理都不一样),代码加载一个释放后再加载另外一个,那岂不是内存爆炸?

加载了一个比较大的spine,然后调用上面的方法后,内存一致在170m,没有下降过,想知道怎样才能下降?