对 Javascript 垃圾回收机制的理解

JavaScript主要使用标记清除垃圾回收方法,当变量进入或离开执行环境时进行标记。引用计数在某些情况下会导致内存泄露,特别是涉及到BOM和DOM对象的循环引用问题。低版本IE中,BOM和DOM对象使用引用计数回收垃圾。
摘要由CSDN通过智能技术生成

1、标记清除(mark and sweep)
这是 JavaScript 最常见的垃圾回收方式,当变量进入执行环境的时候,比如函数中声明一个变
量,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为
“离开环境”
垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量以及
被环境中变量所引用的变量(闭包),在这些完成之后仍存在标记的就是要删除的变量了
2、引用计数(reference counting)
在低版本 IE 中经常会出现内存泄露,很多时候就是因为其采用引用计数方式进行垃圾回收。引
用计数的策略是跟踪记录每个值被使用的次数,当声明了一个 变量并将一个引用类型赋值给该
变量的时候这个值的引用次数就加 1,如果该变量的值变成了另外一个,则这个值得引用次数
减 1,当这个值的引用次数变为 0 的时 候,说明没有变量在使用,这个值没法被访问了,因此
可以将其占用的空间回收,这样垃圾回收器会在运行的时候清理掉引用次数为 0 的值占用的空
间在 IE 中虽然 JavaScript 对象通过标记清除的方式进行垃圾回收,但 BOM 与 DOM 对象却是通过
引用计数回收垃圾的,也就是说只要涉及 BOM 及 DOM 就会出现循环引用问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值