垃圾回收 及 内存泄漏

1、垃圾回收的策略通常有两中——标记清除 和 引用计数 。      (详细介绍请参考J《avaScript高级程序设计》)

2、js中最常用的垃圾收集方式是标记清除。但是COM对象(BOM和DOM对象就是使用C++以COM对象的形式实现的)垃圾收集机制采用的就是引用计数策略。
  使用标记清除的方式,不会引起内存泄漏的问题(哪怕对象相互引用也没有关系)。因为变量离开执行环境就会被回收。

  (个人认为)现在的浏览器基本不用引用计数,只有早期的ie中com对象是使用引用计数的,现在应该都是使用标记清除,所以不要考虑内存泄漏的问题。

3、使用引用计数策略, 在函数中出现循环引用的时候,当函数执行完毕,可是函数里的变量引用计数不为零,垃圾回收机制无法回收,这个对象将一直存在内存中。如果这个函数被多次调用的话,就会导致大量内存得不到回收。从而出现内存泄漏问题。

4、解决循环引用的问题,在不使用变量的时候,手工断开原生JavaScript对象(获取DOM对象的变量)与DOM元素之间的链接。用element = null;

5、JavaScript内存泄漏的质疑  : http://www.cnblogs.com/iyangyuan/p/4310601.html (个人也觉得现在浏览器基本不会存在内存泄漏问题,基本不用考虑内存泄漏的问题)

 

 

总结(个人观点):原生js对象不存在内存泄漏问题(原生js对象常用标记清除的垃圾回收策略),引起内存泄漏的问题主要还是在函数中对DOM的操作,同时DOM对象的属性指向函数的对象。内存泄漏和闭包没一点关系,只是闭包的结构操作函数有优势,不注意就会在闭包中出现对DOM的循环引用。

 参考: https://www.cnblogs.com/yhf286/p/4918095.html  或 https://www.cnblogs.com/sunhuahuaa/p/7655587.html (推荐)

具体  闭包函数的问题  有空看  JavaScript高级程序设计

转载于:https://www.cnblogs.com/wfblog/p/9064884.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值