知识总结----js垃圾回收机制

本文介绍了JavaScript中的两种主要垃圾回收机制:标记清除和引用计数。标记清除是现代浏览器普遍采用的方法,它在特定时间间隔内释放不再使用的内存。而引用计数法则因为循环引用问题导致效率较低,已较少使用。通过实例展示了这两种方法的工作原理,并讨论了循环引用问题及其解决方案。
摘要由CSDN通过智能技术生成

目前常见的垃圾回收机制主要是:标记清除法 和引用计数法。

标记清除法

  • 垃圾收回指的是在内存中释放无效占用的内存,而不仅仅是说销毁对应的变量。
  • 每次清除时,会先排除全局变量和闭包变量的内存,其余的都是可以释放的垃圾内存。
  • 每隔一段特定的时间间隔就进行一次收回。
  • 目前各大浏览器基本都是采用这种方法进行垃圾回收,不过标记方法和时间间隔有所不同。
function test1() {
  var a = 1 // 进入环境
  console.log(a) // 输出 1
}

test1() // 离开环境,释放 test1 内存,a 销毁

console.log(a) // 报错,未定义该变量

引用计数法

  • 通过统计内存的引用次数,当内存引用次数为 0 时,销毁回收该内存资源。
  • 存在循环引用问题,目前很少用到这种方法作为辣鸡回收机制。

正常情况下:

function test2() {
  var a = {} // a 引用次数为 1
  var b = {} // b 引用次数为 1

  var c = a // a 引用次数 +1 = 2
  var c = b // a 引用次数 -1 = 1, b 引用次数 +1 = 2
}

test2()

循环引用问题:

function test2() {
  var a = {} // a 引用次数为 1
  var b = {} // b 引用次数为 1

  // 循环引用,a 和 b 的引用次数会不断增加,导致内存无法释放
  a.prototype = b // b++
  b.prototype = a // a++

  // 人为去解决循环引用问题
  a = null
  b = null
}

test2()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值