首页 > Web开发 > 详细

js垃圾回收机制

时间:2019-05-01 18:28:50      阅读:110      评论:0      收藏:0      [点我收藏+]

通过链接过来的朋友知道闭包存在内存不清除问题,也就是局部变量本来要自动清除的,现在不清除了,那么这个清除是怎么个清除法?

手动清除法:适用于闭包不用了的情况下

function outer() {
        var a = 1;
      return function inner() {
            a = a + 1;
            console.log(a)
        }
    }
    // fn和inner函数连在一起,不能自动清理a
    var fn = outer();
   //  不用闭包了,跟inner断开联系
    fn = null

标记-清除法(浏览器默认,有内存储存不连续缺点):说的简单点,不同浏览器都是固定时间清理一次,清理那些不再需要的变量,只不过不同浏览器的时间不同而已,都说了是标记-清除,首先要标记。【CG算法】(共轭梯度)(迭代)

标记:从windows全局对象开始往下找,找到了做个标记,做什么标记不重要(红宝书),没找到的也就是没标记的都要清除。也就是为什么把outer()给全局fn就不用清除a了呢,因为赋值给fn,windows下找到了fn,fn又找到了a所以清除不了。

清除:垃圾清理器清理就好

引用计数法(循环引用无法清除):记录引用次数,0次就可以清除了,循环引用是致命的,所以浏览器都抛弃了引用计数法

var obj1 = {
        fn: function(a) {
          console.log(a);
        }
      };
      var obj2 = {
        fn: function(b){
            console.log(b);  
        }
      };
      // obj1引用了obj2,obj2引用了obj1,引用计数法无法清除
      obj1.fn(obj2)
      obj2.fn(obj1)

 

js垃圾回收机制

原文:https://www.cnblogs.com/wchjdnh/p/10800240.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!