[3.8.1]安卓遇到无法释放内存的问题及目前解决方法

  • Creator 版本: 3.8.1
  • 目标平台: Android
  • 重现方式:
    往一个父节点底下增加含有相同一个精灵组件的节点,用的图片还是cocos引擎自带的,就这样实例化放个1000次,然后尝试删除掉释放内存。
    const picNode = instantiate(picPrefab);
    picNode.parent = fNode;
    尝试过以下几点方式:
    1、父节点清空:fNode.destroyAllChildren();
    2、子节点们循环:fNode.children.forEach(item => item.destroy());
    3、资源预制体释放:assetManager.releaseAsset(picPrefab);
    4、计数减少:picPrefab.decRef();
    5、资源预制体销毁:picPrefab.destroy();
    6、A、B场景都勾选了Auto Release Assets,两个场景互相切换
    以上这些方法都没法降低内存,希望官方人员能够重视并及时给予回复,这种测试用例20分钟都能写完。到底是我方法都用错了,还是真的存在这个问题。
1赞

3.7.4安卓原生也不释放,基本上内存越用越大直到崩溃,无论用什么方式摧毁资源都无法降低内存

怎么用的上代码看看

项目结构及测试代码.zip (104.1 KB)
另外再附上代码和截图,内存只增不减自己用android Studio测就知道了,这个问题3.7就存在了,直到现在还没有解决吗?

3.6.3除了websocket崩溃的问题算是最稳的了

1赞

之前项目一直都是用3.6.3,用了好久,就是性能这块原生一直被卡脖子,3.8.1公司做决定要升级,好不容易升级了,这难道还得回退回去?3.6.3都不知道出了多久了,怎么感觉以后都更新越来越拉,哎,发个牢骚

我公司之前升级退回过:joy::joy:,都是有大bug

感谢反馈,能否提供一个完整的复现 demo,而不是代码片段。方便我们排查。谢谢。

还挺苛刻 :rofl:
我保证小版本是x.3就升级了

行,给你个demo,希望给个准确回复:
3.8是否可以正常释放内存?还是调用方式有问题?
根据答复,我们公司考虑是否会回退版本,这个很重要。
FuckMemory.zip (659.4 KB)

这次又用3.6.3的试了下demo,发现app在正常使用的时候内存还是释放不了,执行释放的代码后,只有切换到后台的时候,过了4,5秒才会正常地释放掉内存,内存降低在350以下。3.8.1哪怕切换到后台,内存只是降低显示的内存一百,删除节点的内存还是不能释放。这3.6.3和3.8.1这两种奇葩状况都不能做内存优化,我指定的android版本是android-30

之前的项目一直使用的android SDK都是Android30(也不知道是哪些贴吧前辈推荐的)。在经历项目性能卡脖子的阶段痛定思痛要优化性能这块问题,发现了没法正常释放内存资源这档事,目前2023-11-12为止总结出的解决方法就是:
妈蛋别用android30!这特么是个天坑版本!使用android33,我用8年前的小米5s都能正常释放内存!
android33还需要再测试更多的机型,免得项目有些老用户出现闪退、安装问题。到时候再进一步反馈吧
再次提醒:别用android30SDK,改用Android33,还有,哪怕用Android33,勾选了场景自动释放资源,切换场景并不能正常释放资源,先这样。另外再提一嘴:哪怕android33了垃圾回收机制也不会随时随地地释放,加载大场景的时候也有可能内存溢出闪退。还是需要在切换场景等地方调用:sys.garbageCollect(),强制垃圾回收,还有NDK还是得用21版本的,不然打包不了 :joy:

7赞

????居然是这个问题?

嗯,是的,真是surprise,motherFucker

居然是这个问题……太神奇了。

image
大佬,问一下sdk选择33之后,这两个插件的版本号你设置多少?as设置33后各种报错 :sob:

image 这里我看了下,都是8.0.2

居然这么神奇,这个跟NDK版本有没有关联?

引擎组是不是可以排人验证下?

NDK版本没怎么频繁更换,只用过21.4.7075529和现在26.1.10909125的,感觉跟NDK没关联。