JS垃圾回收机制

一、什么是垃圾

一般来说,没有被引用的对象就是垃圾,为了减少内存被无用的变量占用造成内存的浪费,所以需要对垃圾进行回收

二、回收的方法

  1.标记清除

  • 清除维度:其作用域是否在执行环境
  • 不同执行环境清除原则:全局作用域是在当前窗口在执行态的时候就不会被清除,但是局部环境是在其执行环境被销毁的时候就会被标记清除
  • 举例解释
let obj1 = {
  prop: 'obj1'
}
function f1() {
  let obj2 = {
    prop: 'obj2'
  }
  return obj2
}
f1()

对象obj1是全局环境中的声明,obj2是局部环境f1中的声明,当f1()执行之后,obj2就会被释放,但是全局作用域中的obj1不会

  • 图示

2.引用计数清除

  • 清除维度:对象被引用的次数
  • 清除规则:当一个对象被赋值null的时候会被清除,当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其所占的内存空间给收回来
  • 举个栗子:下面的例子会比较容易理解
let obj = {
  prop:'obj'
} // 该对象的{ prop: 'obj }的引用次数为1

let obj1 = obj // 该对象的{ prop: 'obj }的引用次数为2

obj1 = {
  prop: 'obj1' 
}// 该对象的{ prop: 'obj }的引用次数-1,为1

obj = null // 该对象的{ prop: 'obj }的引用次数为0,会被清除

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值