收藏
回答

小游戏平台weakmap似乎存在内存泄漏

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小游戏 Bug weakmap 微信安卓客户端 8.0.9 看不到

按理来说,weakmap这种弱引用,里面的内容可以自动gc调,但是debug发现微信小游戏平台weakmap的内容很长时间都没有被回收

这个是真机profile的结果, 第一个heap为进入场景时的堆栈,第二个是来回不停的切场景后(切了5次以上场景的后回到原来的场景)的堆栈,紧接着又切到另一个场景,第三个heap便是该情况下的堆栈,从summary视图来看,这里存在一些早期的内存对象(第一个heap和第二个heap间),而且这些对象大部分是被weakmap引用住。如果下次触发gc的话,这些内存应该会被回收

于是强制gc,然后等了25分钟,第四个便是该情景的堆快照

然后这些早期创建的内容依然被weamap引用住了。我们使用laya引擎,pc端没有这种情况。不知道这个是调试环境的原因还是本身微信环境的weakmap存在泄漏?

据官方说法weakmap为v8自带的内容,这种情况不太可能,于是我不使用weakmap,再次profile,之前的被引用住的内容没有了。这个能实锤吗?

最后一次编辑于  2021-08-12
回答关注问题邀请回答
收藏

1 个回答

  • Forever
    Forever
    2021-08-12

    我们的相关技术人员说不太可能,基础库内部也大量用了 WeakMap,应该是你们在其它地方有强引用没释放,并且 WeakMap 也不是我们实现的,是 V8 自带的

    2021-08-12
    有用
    回复 3
    • hobson
      hobson
      2021-08-12
      不过看了下retainer链,都是weakmap的
      2021-08-12
      回复
    • hobson
      hobson
      2021-08-12
      如果是v8自带的话,确实这种可能性比较小,我们再排查下看看
      2021-08-12
      回复
    • hobson
      hobson
      2021-08-12
      刚刚我不用 weakmap,后 相同的操作方式,对应引用的情况就没有了,而且我们pc端也使用weakmap,也没有这种情况哦
      2021-08-12
      回复
登录 后发表内容