Creator1.6.0 IOS环境 场景跳转自动释放垃圾回收问题 physics物理组件问题

http://forum.cocos.com/t/cc-sys-garbagecollect/49386

感谢,但是我这个demo里边跳转场景加上cc.sys.garbagecollect()就可以释放了,但是不是很清楚何时使用.
垃圾回收不是说到内存到一定大小,系统会去回收吗?@panda @jare @nantas @heyf 求大神释疑

老师,大神们在线等啊.

请问可以详细解释一下吗?
请问勾选了自动释放资源是bug还是必须手动调用cc.sys.garabCollect()吗?
还是原生环境必须手动调用cc.sys.garabCollect()?
或者说原生环境监听内存警告时手动调用cc.sys.garabCollect()?

你检查一下自己的代码,是不是其它地方导致的崩溃.切换场景可能会GC,会暴露问题.

除了cc.director.loadScene没有其他…有demo

2天了要沉了啊…

关于释放的细节参考文档

http://cocos.com/docs/creator/scripting/load-assets.html#--7

cc.sys.garbageCollect() 是强制 GC,任何时候使用都可以,只是 GC 的结果不同而已。至于内存到一定大小,确实会触发 GC,但是能回收多少内存是取决于你的游戏中有多少垃圾,任何可访问被引用的对象都不是垃圾。

我晚点会看一下你的项目是否像你说的一直涨到崩溃都不会掉

好的,请IOS真机测试一下demo,感谢老师.

@panda 老师,刚刚发现一个问题,原生环境场景跳转使用cc.sys.garbageCollect()导致崩溃.

在游戏逻辑场景里,player节点包含刚体,物理碰撞,spine动画.player节点死亡设置active=false;重生设置active=true;重生计时是在场景里组件里的update:fucntion计算时间,没用计时器Scheduler.

只要有player节点重生(有20个player,active=false后5秒做active=true,随机一下位置).当退出当前场景进入Loading过度场景cc.director.loadScene(“Loading”);时调用cc.sys.garbageCollect()会导致崩溃.而在Loading过度场景里加载cc.director.loadScene(NextScene);之后调用cc.sys.garbageCollect()不会导致崩溃.

原来代码是2个地方都有cc.sys.garbageCollect(),改为只在cc.director.loadScene(next);后调用不崩溃.

关于 GC 不够敏感的问题,我调整了一下引擎代码,你可以看一下,

https://github.com/cocos-creator/cocos2d-x-lite/pull/777/files#diff-ace0136bea107cccfd75e8f2b3882e02R669

重要的是:

JS_SetGCParameter(_cx, JSGC_MAX_MALLOC_BYTES, 1024 * 1024);

这里设置了 1MB,意思是每分配 1MB 的 JS Heap 内存就会主动 GC。这个设置可能需要根据游戏来调整。

关于你游戏中的崩溃问题,有没有办法给我一个 demo ?

对于资源少,全面使用对象池的项目,为了稳定性,我们倒希望永不GC.

嗨,不知道怎么私信你,可以帮我看看我发的这个帖子吗,不要意思,占用了楼主一层楼:grin: 我的帖子链接http://forum.cocos.com/t/js-apk/50443?u=atalidengyao

1.先手动调用cc.sys.garabCollect()了. 建议:在未来版本项目管理加入内存GC敏感设置项
2.游戏里崩溃.整理了一下测试DEMO:scenegc.zip (497.6 KB)
点击敌人节点到死亡动画播放,让多个节点进入重生阶段.然后点击back跳转场景.错误截图:


将SceneManager.js脚本里边 cc.director.loadScene(Global.SceneManager.loadScene);后边的cc.sys.garbageCollect();删除可以解决问题.但是我猜测是节点上的官方物理组件或者update在垃圾回收时有问题.
3.感谢@panda老师

查了一天终于修复了,physics 的绑定实现中有点问题

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

2赞

感谢@panda老师,辛苦了. 我也写了一天代码眼睛都花了:stuck_out_tongue_closed_eyes:
请问一下这2个问题哪个版本上

1.6.2

好的,谢谢@panda老师i

@panda @jjyinkailejj 老师,今天通过预制体生成30+个player进行战斗,切换场景时候崩溃,之前的处理方法也不行.
有物理组件只要调用cc.sys.garbageCollect()就会崩溃.附上截图


请问这个问题是不是也是physics 的绑定实现的问题,已经修复了? 等1.6.2版本就可以了? 在线等.

给 demo 吧