内存泄漏

一:什么是内存泄漏

在计算机科学中,由于疏忽或错误造成程序未能释放已经不再使用的内存,并非指内存在物理内存泄漏是内存消失,而是应用程序分配某段内存后,由于设计疏忽,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。指在JS中已经分配内存地址的对象由于长时间未进行内存释放或无法清除,造成了长期占用内存,使得内存资源浪费,最终导致运行的应用响应速度变慢以及最终崩溃的情况。

二:常见的内存泄漏情况

JS具有自动垃圾回收机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。

原理:垃圾收集器会定期找出那些不再继续使用的变量,然后释放其内存;关于垃圾回收机制的了解可以看看我的上一篇博客对垃圾回收机制的理解。

1.意外的全局变量

(1)未声明直接赋值

js在非严格模式下允许对未声明的变量进行赋值,则未声明的变量默认为全局变量,因此函数执行后也不会被回收。

(2)this创建的全局变量

2.未被清空的定时器

子节点清除后定时器还会不停的走。如不及时清除定时器,内部执行的回调函数将不会被回收,就会造成内存泄露。

3.没有清理的DOM元素

(1)引用元素没有清理

Dom节点删除了,但是节点的引用还在,导致无法对其所占内存的回收,如上文第二个情况中,若不删除Dom节点的引用,无效的Dom引用将继续常驻在内存中

(2)事件的绑定没有解除

解决办法:移除事件绑定

4.滥用闭包

函数的内部函数保存了局部变量obj,以至于在函数getObj执行完毕后,局部变量obj未能销毁,最终导致内存泄露。如果大量使用闭包存储变量,就会增大内存的消耗。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《陷阱》 你相信在宇宙之外存在外星人么?对!就是所有科幻小说中所写的那种,刚开始的我认为这...
    我睡觉的时候不困_01f2阅读 99评论 0 0
  • 青浦区2022年度开拓国内市场 (展会补贴)扶持资金项目的通知 各有关企业: 为推动我区企业加强品牌建设,积极开拓...
    知产圈李老师阅读 95评论 0 0
  • 二、不妨用下定时器来帮忙 孩子小,往往还不懂得把握时间,这时你可以请定时器来帮忙。 先帮孩子测一次时间,这样就有了...
    授之以渔阅读 129评论 0 3
  • 赏茶艺 文/卧雅斋 茶之为饮自神农,已有三千岁月龄。 陆羽曾作茶经著,道尽沧桑经典中。 桌...
    卧雅斋阅读 321评论 0 0
  • 今早起床时,口渴,头微微疼, 我暗叫不好,血压又升高了! 为什么昨天起床就没事呢? 我马上用手机百度“海盐包热敷与...
    花火喜珠阅读 2,622评论 0 8

友情链接更多精彩内容