js垃圾回收机制及优化

JavaScript 2020-05-24 997

垃圾回收:

1.标记清除
当变量进入环境(作用域)时,就将该变量记录为"进入环境",当变量离开环境时,记录为"离开环境".垃圾收集器运行时,会给在内存中的所有变量都加上标记。它会去掉环境中的变量以及被引用的变量的标记。剩下的就是要被回收的,原因是环境中的变量已经无法访问这些变量了,最后垃圾收集器会销毁这些带标记的变量。
2.引用计数(不常见)
当声明一个变量A并将一个引用类型值C赋给该变量时,该值的引用计数加1,又将该值赋值给另一个变量B,则又加1.但是当变量A的值改变,即A获取到其他值,则C的计数减一,当为0时,则说明无法访问到该值了,这时就会回收。
引用计数会造成循环引用的问题,循环引用指的是对象A中包含一个指向对象B的指针,对象B也包含一个指向对象A的引用

function problem () {    
    var objA = new Object();    
    var objB = new Object();    
    objA.one = objB;    
    objB.two = objA;    
}  

为了避免循环引用的问题,最好是在不使用它们时,将其值置为null,这种做法叫解除引用,解除引用,不等于垃圾回收了,只是让值脱离执行环境,以便垃圾回收器下次运行时进行回收。垃圾回收器不是立刻执行的,而是周期性运行的。

标签:JavaScript

文章评论

评论列表

已有0条评论