哪些情况会造成内存泄漏,如何发现

349 阅读2分钟
原因:

当一块内存不再用到,但是垃圾回收机制又无法释放这块内存的时候,就导致内存泄漏

影响

内存泄露会因为减少可用内存数量从而降低计算机性能,严重的可能导致设备停止正常工作,或者应用程序崩溃。

内存泄漏的几种场景
  1. 闭包只是让内存常驻,滥用闭包才会导致内存泄漏。闭包可以读取函数内部的变量,然后让这些变量始终保存在内存中。如果在使用结束后没有将局部变量清除,就可能导致内存泄露。
  2. 对同一个事件重复监听,但是忘记移除,会导致内存泄露。
  3. console.log打印的对象不能被垃圾回收,可能会导致内存泄露。
  4. setInterval也可能会导致内存泄漏
解决方法
  1. 不要滥用闭包,对于不再使用的变量,值设置为null,将变量清除即可。 另一种方法是 使用立即执行函数,函数执行完就销毁。
  2. 事件监听导致的内存泄露,监听后移除即可
  3. 对于console.log, 安装一个webpack插件,项目打包构建时,移除console.log
  4. setInterval 不需要使用时,记得清除,最晚也要在页面卸载时清除
怎么发现内存泄露了
  • 通过chrome浏览器的performance面板记录页面活动,然后在页面上进行各种交互操作,过一段时间后,停止记录,生成统计数据,然后看timeline下部的内存变化趋势图,如果是有规律的周期平稳变化,则不存在内存泄漏,如果是整体趋势上涨,则说明存在内存泄漏。
  • 通过DynaTrance (IE) profiles等工具一段时间收集数据,观察对象的使用情况,然后判断是否存在内存泄漏,修改验证。