js 的垃圾回收机制

js 的垃圾回收器用来跟踪内存的分配和使用,会定时把分配后不再使用的内存释放掉。

js 垃圾回收器判断内存是否不再使用时,使用了 引用计数标记-清除 两种机制。自 2012 年起,所有现代浏览器都使用了标记-清除垃圾回收算法。

  • 引用计数

    • 当对象没有被其他对象使用时,将会被回收机制回收。

    • 缺点:无法处理循环引用的场景,进而造成内存泄露。

      • function f(){
          var o = {};
          var o2 = {};
          o.a = o2; // o 引用 o2
          o2.a = o; // o2 引用 o
        
          return "azerty";
        }
        
        f();
        
  • 标记-清除

    • 当对象从根对象(全局对象)出发再无法获取到时,将会被回收机制回收。
    • 缺点:无法从根对象查询到的对象将无法被清除。但是实际开发中很少遇到此种情况。