内存泄露

本文介绍了JavaScript中的内存管理和垃圾回收机制,包括标记清除和引用计数两种主要方式,并通过实例展示了如何进行内存泄漏的预防。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存泄露

程序运行时,操作系统会为其分配运行所需要的内存,如定义变量等。当程序中某一部分变量不会再被用到,该变量所用到的内存会被回收。有些高级语言像C语言不会自动回收,需要手动释放内存(free)。但javascript可以自动回收内存,这就是javascript的垃圾回收机制。

当不会再用到的内存无法被释放,就是内存泄露。

垃圾回收机制

javascript的自动垃圾回收机制有两种:标记清除和引用计数
垃圾回收的目的是回收不用的变量占用的内存。
1. 标记清除
《javascript高级程序设计 第三版》介绍标记清除是最常用的垃圾收集方式,当变量进入环境时,就将其标记为“进入环境”。无法清除进入环境的变量所占用的内存。当变量离开环境时,将其标记为“离开环境”。

var globalI = "global"
function add() {
    var localI = "local"
    console.log(globalI)
    console.log(localI)
}
add()

javascript垃圾回收器会为所有变量添加标记, 然后取消进入环境的变量的标记。
上述环境中,当函数执行时,垃圾回收器将localI和globalI标记为进入环境。当函数执行完毕时,垃圾回收器重新标记全部变量,然后取消环境内变量的标记,即globalI的标记被取消,localI存在标记,被回收。
2. 引用计数
引用计数是跟踪每个值被引用的次数。当声明了一个变量并将一个引用类型值 赋给该变量时,则这个值的引用次数就是 1,如果该引用类型又被赋值给其他变量,则这个值的引用次数加1,如果指向该值的变量被赋予了其它的值,那么引用次数减1。非引用类型的值次数不会增加,因为变量赋值时实际上是新开了一块内存把值复制进去。
当一个值的引用次数为0时,垃圾收集器的下次执行会将其回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值