如何知道js内存为什么无法回收?

程序里有很多地方需要使用闭包,刚开始写的时候也没太注意内存,现在程序写完了,发现如果反复运行后内存会一直增加,有些东西并没有被cg回收,具体如下

程序运行中的内存使用情况
clipboard.png

程序一个周期运行完毕后的情况

clipboard.png

可以看到只回收的部分,但部分还在内存中(比如Component一直是 * 1000)...
应为现在程序写完了,而且代码又多,代码里实在是很难找到 是哪里的引用导致无法回收,大家有没有什么好的办法或工具?

阅读 2.8k
2 个回答

比如写 vue 或 react 这种大型框架,可能稍有不慎就会出现内存泄漏,很想知道像尤大神这种人在开发的时候会用到哪些工具的,都是全凭经验 + 谷歌 devtools吗??

新手上路,请多包涵

写代码的时候需要注意,数据量大的对象不要被多个变量引用,用完就设置为null,如果有数据量大的对象需要被多次使用,特别是在单页面应用中,就把该对象统一放到window的一个自定义属性下面,方便管理。
之前基于vue的单页面应用中使用gis,不得不得使用jquery,由于历史遗留问题,gis在封装时部分数据量特别大的对象被多个变量引用,导致无法通过设置为null将内存释放掉,最后通过keep-alive(仅加载一次)和iframe+PostMessage(刷新时自动释放内存)才解决了问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题