JavaScript 内存管理

一、内存释放(垃圾回收)

1、主动释放

    JavaScript不需要手动地释放内存,它使用一种自动垃圾回收机制(garbage collection)。当一个对象无用的时候,即程序中无变量引用这个对象时,就会从内存中释放掉这个变量。

        var  s  =  [  1 2  ,3];
       console.log(s)
      // end 程序执行到这,发现s 不再使用,释放
       
      你也可以主动释放
       =   null ;

     

    2、最近使用优先原则,有A, B ,C  D, 变量, 执行一次则被调用的变量标记 + 1, 没有用到的减掉1 。当计数为零,或者需要新的内存块(内存不够了)则释放 计数最少者。呃,大意就是这样,底层执行还有很复杂,资源锁啦,依赖啦,有意可以自己深究。

二、内存维持

1、循环引用

     三个对象 A 、B 、C

     A=>B=>C :A的某一属性引用着B,同样C也被B的属性引用着。如果将A清除,那么B、C也被释放。

     A=>B=>C=>B :这里增加了C的某一属性引用B对象,如果这是清除A,那么B、C不会被释放,因为B和C之间产生了循环引用。

2、循环引用和闭包

     function  outer(arg){
      
        var  num = 0
        
function  inner(){ 
             console.log(num)
             num++
        }
        return inner

    }
var fun = outer()
fun()  // 0
fun()  // 1

这是一种内部的引用。当调用一次outer时,就会在其内部创建num变量和inner对象,inner使用了num. 这样即使执行完,因为引用没有释放,内存仍然会存在。好处是可以保持变量,坏处是闭包多了,内存被占满(也叫内存泄露)。

小结:无用变量手动释放,巧妙使用闭包可以达到缓存的目的,闭包是个双刃剑(慎用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值