1.4.0rc3版native上内存一直涨的问题

现在是在iphone6上调试的,手机就1G内存,手机一会儿就撑不住,闪退了…

@panda 进入初始场景时:

释放初始场景的资源并加载主场景的资源,加载成功后进入主场景:

进入主场景后,切换了几个页面,都是通过cc.loader加载的prefab:

从主场景进入初始场景(在主场景销毁的时候通过代码GC过一次,在销毁的时候调用cc.loader.releaseAll,再加载初始场景的资源):

再点击初始场景页面上的按钮,在GC一次

再次进入主场景:

再次进入初始场景:

就这样开始越来越大内存,如果再进入战斗场景,然后切换回主场景,增加还会继续…

我之前给您发的Demo也是这样的情况,发您qq邮箱了,您看一下呢

我这周稍晚会看一下

好的,麻烦了

关注一下~~

同样发现内存增长,
在调用GC()后,有一定的内存释放,并在一段时间内内存并不会增加,保持平稳
但过一段时间之后,内存又开始持续上涨(在这期间没有做任何操作)
然后又掉GC(),有一定的内存释放(此时释放的内存只是释放了图片资源,但前期持续增长的内存并有的到释放)
,然后又保持平稳不增长,过段时间又开始增长,如此循环!

已修复,会跟随引擎 v1.4.1 发布,具体的信息参考:

https://github.com/cocos-creator/engine/pull/1521

4赞

好的,我改改试试,谢谢@panda

这个PR会造成jsb下触摸事件异常。 定位到scriptCore.cpp ScriptingCore::handleTouchEvent中
在 return ret;前添加
removeJSObject(_cx, touch);
removeJSObject(_cx, event);
就可以了。 但是为什么会有问题我不懂,会不会有别的隐患也不懂。对比代码找出来的。

1赞

@panda 请问一下,我是直接修改应用程序的cocoscreator包体里面的文件就可以了吗?因为都只是js文件,是不是不需要重新build一个工程了啊?以下是我已修改的路径截图,劳烦您看一下对不对。还有就是我怎么确定已经修改成功了啊,也就是在build之后,修改过的文件在安卓工程的哪个目录下啊?

这个PR不止js引擎。C++引擎也有变动,涉及到的文件还是比较多,而且因为有其它改动也涉及到了相关文件,手动去改有点不现实,还是用git去合吧。你看我在上面说的。这个PR还有BUG。解决方式也有写了。

还有我看你是用的creator里包含的原生引擎。这个没办法去合PR的。要用自定义引擎才行。或者你等creator发版本吧。

那我是应该先去git上把现在的cocos2d引擎和js引擎都拉取下来,然后都把下图这两处都改了吗

再加上你说的修改的ScriptingCore的那一处

是的。c++大概是

这个提交。js大概是这次提交。

@yangzhu626 谢谢反馈

这个问题的正式修复在此:

https://github.com/cocos-creator/cocos2d-x-lite/pull/551

我的修复中,没有 remove touch 对象,是因为 event 对象是在堆上分配的内存,暂不知由于什么原因,它的 destructor 在生命周期结束后没有被调用,导致 Ref 中关联的移除 JS 对象的代码没有被调用,又由于再次发生事件时堆上分配的内存地址不变,导致 native 对象被链接到了一个错误的 JS 对象上。而 touch 对象是用 new 表达式构造的,所以它的内存在栈上,每次事件发生时,产生的新 touch 对象的内存地址不会相同,而且 touch 对象的析构函数也会被正常调用,所以不需要这个处理。

具体 destructor 未被调用的原因我会继续查。

请问下个版本大概在什么时候发布???:pray:

在每个场景的onLoad里面手动调用cc.sys.garbageCollect();结果切场景崩了

1.6 修复了类似的问题,你可以尝试一下内测版本