JS垃圾收集机制

Posted 你今天学习了吗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS垃圾收集机制相关的知识,希望对你有一定的参考价值。

JS 具有自动垃圾回收机制,不需要像C++/C等语言去手动跟踪内存使用情况。

 

垃圾收集方式: 

 1.标记清除: 垃圾收集器在运行时给存储在内存中的所有变量都加上标记,然后,它会去掉环境中的变量,以及被环境中变量引用的变量的标记。而之后被标记的变量将为准备删除的变量,原因是环境中已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作,消除那些标记的值被回收内存空间

2.引用计数,跟踪每个值被引用的次数

当声明了一个变量并将引用类型值赋给它的时候,则这个值引用次数就为1,如果同一个值又被赋给另一个变量,则引用次数加1.反之,如果引用这个值的变量又取得了另一个值,则这个值引用次数减1

当这个值引用次数为0时,说明无法再访问这个值了,因而就可以将其内存空间收回来

引用计数缺点:

循环引用会导致内存严重泄漏。

例如:

function problem(){

  var object1 = new Object();

  var object2 = new Object();

  object1.some = object2;

  object2.another = object1;

}

如上述,两个对象通过属性互相引用,则两个对象引用次数都是2;函数执行完后,对象仍存在,若多次调用,则浪费大量内存。

为了避免,可以手动断开对象间的相互引用,即

object1.some = null;

object2.another = null;

以上是关于JS垃圾收集机制的主要内容,如果未能解决你的问题,请参考以下文章

JVM垃圾收集机制

垃圾回收机制与内存管理

JS高程4.变量,作用域和内存问题垃圾收集

67.Java垃圾收集机制对象引用垃圾对象的判定垃圾收集算法标记—清除算法标记—整理算法分代收集垃圾收集器性能调优

Java垃圾收集机制

Javascript的垃圾回收机制