美文网首页
Javascript 引用计数法的原理和优缺点

Javascript 引用计数法的原理和优缺点

作者: 喜悦的狮子 | 来源:发表于2021-08-12 23:20 被阅读0次

    引用计数法是什么?

    引用计数法是GC算法之一。GC算法是内存管理中,垃圾回收器完成垃圾回收,从查找垃圾、释放空间到回收垃圾的一种规则。

    内存管理

    开发者主动申请空间、使用空间和释放空间。

    申请空间

    let obj = {}
    

    使用空间

    let obj.name = 'stone'
    

    释放空间

    let obj = null
    

    以下就完成了一次内存管理,如果没有空间释放内存就会泄漏。

    垃圾回收

    Javascript 中的内存管理是自动的,对于一个对象来说如果它不再被引用,或者因为一些不当的逻辑操作以至于不能在根上访问到的时候,它就是垃圾。

    (所谓根就是全局变量对象,访问的方式可以是通过引用,又或者是作用域链。)

    当发现垃圾的时候,Javascript 执行引擎就会过来把垃圾所占的对象空间回收。

    引用计数法的原理

    引用计数算法的原理是设置一个引用数,判断当前引用数是否是0。

    代码中有一个对象空间,多了一个变量名指向它,引用计数器就为它的引用数 + 1,减b少一个引用引用计数器就为它的引用数 - 1, 一旦引用数变为 0, 该对象空间就会被认为是垃圾,然后被回收。

    引用计数算法的优点

    • 发现了垃圾可以立即回收,一旦引用数为 0 就进行回收。
    • 可以避免程序的暂停,因为一旦程序内存将要爆满的时候,引用计数就会找到垃圾并进行回收。

    引用计数算法的缺点

    • 无法回收循环引用的对象, 因为在如下代码中,在函数执行结束后,虽然 stone1 和 stone2 都无法被根访问到了,但是由于他们自身互相引用所以根据引用计数法的回收条件,是无法被回收的。
    function fn() {
        const stone1 = {}
        const stone2 = {}
        stone1.name = stone2
        stone2.name = stone1
    fn()
    
    • 时间开销大,因为引用计数算法需要维护引用数,一旦发现引用数发生改变需要立即对引用数进行修改。

    相关文章

      网友评论

          本文标题:Javascript 引用计数法的原理和优缺点

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