多谢!!重新导出工程就好了
有办法自己设置gc的策略吗? 现在是一直不gc,内存一直涨
你确定强制 sys.garbageCollect() 也无法让内存降吗?
出现这种情况,有几个原因:
- JS 对象还被持有
- 如果是原生上的问题,那么 C++ 层中可能
持有
或者root
了 JS 对象,导致 JS 对象没有被 GC
所以,你先确认一下 web 上内存是否能正常,再排查 原生上的行为,如果有自己写的 jsb 绑定代码,重点排查一下是否有哪些 jsb 对象 (se::Object*) 被持有并且 root 了。
如果你怀疑是引擎的问题,那么能提供一个最小的复现方式是最好的。
如果无法提供复现方式,想自己排查,通过 windows(visual studio)、mac (xcode allocation profile) 工具来辅助排查,应该会有一些线索。
目前没有暴露 gc 调节的接口到 js 层。
其实 V8 默认的 GC 策略应该是最优的,有垃圾对象回收也是比较及时的。
确认一下
- web 上是否也出现这种回收比较慢的情况。
- 如果不调动 sys.garbageCollect(),大概过多久能够降下来?
sys.garableCollect() 属于全量 GC 操作,会比较耗时,只建议在切换场景的时候调用,游戏过程中是不建议调用的。
re 1. web 上是否也出现这种回收比较慢的情况。
刚刚在web上试了一下,上图是js堆的情况
re 2. 如果不调动 sys.garbageCollect(),大概过多久能够降下来?
同样的业务场景,跑了多次,差不多都是这么个曲线,17分钟的时候出现明显下降
android 上,是用真机测试的吗?
3.8.4 中有修复了若干内存泄露的问题:
- x86模拟器导致的内存泄露
- websocket 接收 二进制 数据导致的 jni 泄露
- label 是 none 模式下,频繁改变文本内容导致的泄露
你可以挨个合并一下改动,再确认一下是否还会出现。
感谢!是真机测试的