按理来说,weakmap这种弱引用,里面的内容可以自动gc调,但是debug发现微信小游戏平台weakmap的内容很长时间都没有被回收
这个是真机profile的结果, 第一个heap为进入场景时的堆栈,第二个是来回不停的切场景后(切了5次以上场景的后回到原来的场景)的堆栈,紧接着又切到另一个场景,第三个heap便是该情况下的堆栈,从summary视图来看,这里存在一些早期的内存对象(第一个heap和第二个heap间),而且这些对象大部分是被weakmap引用住。如果下次触发gc的话,这些内存应该会被回收
于是强制gc,然后等了25分钟,第四个便是该情景的堆快照
然后这些早期创建的内容依然被weamap引用住了。我们使用laya引擎,pc端没有这种情况。不知道这个是调试环境的原因还是本身微信环境的weakmap存在泄漏?
据官方说法weakmap为v8自带的内容,这种情况不太可能,于是我不使用weakmap,再次profile,之前的被引用住的内容没有了。这个能实锤吗?
我们的相关技术人员说不太可能,基础库内部也大量用了 WeakMap,应该是你们在其它地方有强引用没释放,并且 WeakMap 也不是我们实现的,是 V8 自带的