js垃圾回收机制

js具有自动垃圾回收的机制,开发人员无需手动去触发

常用的垃圾收集方式:

1.标记清除。当变量进入环境,标记为“进入环境”,不能释放进入环境的变量所占用的内存,当变量离开环境是,则将其标记为“离开环境”,当被标记为离开环境,垃圾回收机制会清理这些变量

2.引用计数。跟踪记录每个值被引用的次数,当声明一个变量并将一个引用类型的值赋值给该变量时,则这个值的引用次数就是1,如果同一个值又被赋值给另一个变量,则引用次数就加1,相反如果包含对这个值引用的变量又取得了另一个值,则这个引用次数减1,当引用次数是0,垃圾收集器在运行时候,就会释放引用次数为0的值所占的内存。

如果obj1.x=obj2,obj2.y=obj1,互相引用的对象,引用次数永远是2,导致没法回收

垃圾回收是周期性运行的,IE6垃圾回收机制是变量256个,4096个对象字面量和数组元素,或者64kb的字符串,达到上述任何一个临界值,垃圾收集器会运行,如果一段脚本比较大,垃圾回收机制会频繁运行,IE7重写了垃圾回收机制,临界值更改为动态修改,初始值和IE6一样,如果垃圾收集例程回收的内存分配量低于15%,则临界值会加倍,如果例程回收了85%的内存分配量,则临界值会到默认值

浏览器运行的内存是有限的,内存限制问题不仅影响给变量分配的内存,还会影响调用栈,在一个线程中能够同时执行的语句数量

确保占有少内存会让页面获得更好的性能,优化内存占用的最佳方式:执行中的代码只保存有用的数据,一旦数据不在使用,将其设置为null来释放引用,这个做法叫解除引用(dereferencing)

解除引用并不是自动回收该值占用的内存,解除应用的作用是让其脱离执行环境,让垃圾收集器在下次运行时将其回收

比如闭包中的变量会一直存在内存中,可手动将其设置为null,让垃圾回收机制回收

function A(){
  let name='tom'
  function B(){
    console.log(name)
  }
  return B
}
let obj = A()
obj()
obj=null//使用完后,将其置为null

垃圾清理是针对对象的,不是针对某个标示符的,不会回收函数声明。函数声明是全局对象windows的一个属性,windows不会被销毁,所以函数声明是不会被销毁的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值