美文网首页
javascript内存管理

javascript内存管理

作者: 言叶丶 | 来源:发表于2017-02-22 14:32 被阅读0次

    内存声明周期

    1. 分配你所需要的内存
    2. 使用分配的内存(读写)
    3. 不再需要时释放内存

    内存分配

    javascript在声明变量的时候就完成了内存分配

    垃圾回收

    引用计数垃圾回收

    此算法把对象不再需要简化定义为对象是否有其他对象在引用它

    当内存不再需要时就会被释放, 垃圾回收算法主要依赖于引用的概念。引用即一个对象拥有访问另一个对象的权限,如果没有引用指向该对象,该对象就会被垃圾回收机制回收
    这种方式无法处理循环引用

    function test () {
        var a = {},
              b = {};
        a.c = b;
        b.c = a;
        reutrn 'asas';
    }
    test(); // a 和b都不会被释放。引用计数算法考虑到它们互相都有至少一次引用,所以它们不会被回收
    
    标记-清除算法

    此算法将对象不再需要简化为对象是否能够获得
    这个算法设定一个根对象(js中即是window对象), 定期的javascript将从根对象开始, 找所有引用的对象,然后在查找这些对象的引用,垃圾回收器将找到所有可以获得的对象和不能获得的对象,
    这个算法可以避免循环引用的问题。test执行之后返回字符串,从全局对象出发, 无法获取a、b两个对象,所以ab会被释放

    从2012年起,所有现代浏览器都使用了标记-清除垃圾回收算法。

    相关文章

      网友评论

          本文标题:javascript内存管理

          本文链接:https://www.haomeiwen.com/subject/jfqmwttx.html