wujie单例模式存在内存泄漏
描述bug 系统加载过子系统之后,内存会一直不释放。导致内存越来越多
如何复现 给出详细的复现步骤 1、子系统A使用重建模式 2、浏览器打开子系统A 3、在当前页面打开chrome-memory,抓取内存快照 4、在当前页面刷新页面,(手动执行垃圾回收)抓取内存快照。
错误截图
最小复现仓库或者地址 查看快照,发现是wujie的shadow对象一直没有释放。
所有子系统均会保存在内存中,但是貌似只有子系统第一次加载会保存在内存中,后续都不会。
刷新了页面都没有释放内存?我有点想知道到底是啥引用了shadow
快照中看到是这里:
现在的问题是sanbox 还是 shadow 没有释放呢
暂时还没定位到问题,跟踪到了子系统的window变量没有销毁
而且有一个重要的现象是,调用了destory之后,再去加载这个子系统,快照中的wujie2对象会一直增加,刷新浏览器也存在
我也遇到了同样的问题,我在想会不会是子应用中的事件监听没有删除,导致引用关系依然存在,虽然wujie将其沙箱设为null了,但是在内存中还有对应的引用关系,所以不会执行gc
经过大量测试刷新页面,子系统内存不释放证实是浏览器(目前只在chrome中发现)问题,测试环境如下:
- 102.0.5005.0(开发者内部版本) (x86_64),已复现
- 103.0.5054.0(开发者内部版本) (x86_64),已复现
- 104.0.5112.0(开发者内部版本) (x86_64),已复现
- 105.0.5195.0(开发者内部版本) (x86_64),已复现
- 106.0.5249.0(开发者内部版本) (x86_64),已复现
- 107.0.5304.0(开发者内部版本) (x86_64),已复现
- 108.0.5359.0(开发者内部版本) (x86_64),已复现
- 109.0.5414.0(开发者内部版本) (x86_64),已复现
- 110.0.5481.0(开发者内部版本) (x86_64),已复现
- 111.0.5563.0(开发者内部版本) (x86_64),已复现
- 112.0.5615.0(开发者内部版本) (x86_64),已复现
- 113.0.5636.0(开发者内部版本) (x86_64),已复现
- 114.0.5735.0(开发者内部版本) (x86_64),未复现
注:但调用wujie中的destroy方法内存扔未释放,并且反复调用destory然后 挂载子系统,会产生重复子系统内存。
相关链接如下:
114.0.5735.199 正式版也会有泄露问题
我这边看到destory没存没有释放大致都是因为重写了iframe.document以及iframe.contentWindow导致内存没有释放,具体可以看下面这个链接
detached-window-memory
直到现在还可以遇到这个bug,导致内存越来越大
我这边看到destory没存没有释放大致都是因为重写了
iframe.document以及iframe.contentWindow导致内存没有释放,具体可以看下面这个链接 detached-window-memory
大佬们解决了吗,有什么办法吗