内存泄漏 && GC原理

内存泄漏定义:

无效引用即无法被程序使用,但又没有被系统回收的内存。

垃圾回收(GC)原理:标记-清除算法

(1) 垃圾回收机制维护一系列的根节点,例如window,globle对象等,这些根节点所占用的内存不会被回收;
(2)从根节点出发,递归的检查子节点,根节点和所有子节点都标记为引用状态,内存不会被回收;
(3)所有没有标记的内存块,视为垃圾内存,自动回收,由系统重新分配;

几种常见的内存泄漏

(1)全局变量:xxx === window.xxx
解决办法: var let const ; 如果不得不使用全局变量,引用之后,手动设置xxx=null
(2)setInterval中引用的变量和对象:未清除定时器,这些变量和对象一直存在内存中
解决办法:clearInterval()清除定时器
(3)dom事件没有移除: dom节点被移除但事件依然存在内存中
解决办法:removeEventListener
(4)循环引用:
var a=new Object; var b=new Object;
a.r=b; b.r=a;
这种情况下,老的计数算法(IE6 IE7)会存在内存泄漏,标记清除算法不会内存泄露!
(5)dom移除:

      var select = document.querySelector;
      var treeRef = select('#tree');
      var leafRef = select('#leaf');   //在COM树中leafRef是treeFre的一个子结点
      select('body').removeChild(treeRef);//#tree不能被回收入,因为treeRef还在

(6) 闭包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值