使用 cc.sys.garbageCollect() 之后的崩溃调用栈麻烦发出来看一下,我们没有观察到崩溃的现象。
现在的内存模型的确有一个问题,就是没有根据 C++ 内存使用情况主动去清理 JS 层内存,导致 JS heap 不够高,但是实际内存使用已经很高,所以 GC 没有触发,但是实际内存过高导致崩溃,这个问题是可以被解决的,我们在 1.6 中会修复。
所以目前才给出主动在场景切换中调用 cc.sys.garbageCollect() 这样的解决方案。
没有勾选 auto release 的情况下,每次切换场景会从 scene asset 创建一个场景出来,所以会有对象的创建,比如 label, node, component 等,这是你观察到的内存的增长,也是可以被 cc.sys.garbageCollect() 所回收掉的,在 loadScene 之后调用 GC 后,我们观察到的内存曲线是平的,没有出现持续增长的情况。
Instrument leak 工具所检查到的 leak 的确有,但是没有几千个这么多,每次场景切换几十个,实际占用的内存也不高,我们看了一下 leak 的对象信息,都是 Spidermonkey 的 malloc 内存块,我们目前无法确定是 Spidermonkey 的内部机制导致的还是什么原因导致的。