JavaScript 中的垃圾回收机制(GC)

1 JavaScript 中的垃圾回收机制(GC)

1.1 垃圾回收相关概念

① 什么是垃圾

没有被使用(引用)的对象就是垃圾

② 什么是垃圾回收

没有被引用的对象被销毁,内存被释放,就是垃圾回收

C、C++ 等编程语言需要手动垃圾回收。

Java、JavaScript、PHP、Python 等变成语言自动垃圾回收。

③ 变量的生命周期(何时会被回收)

全局变量: 整个脚本执行完毕,全局变量就被销毁。

局部变量: 函数调用完毕,局部变量就被销毁。

④ 垃圾没有及时回收的后果

没有被及时回收的垃圾会常驻内存,造成内存泄漏

⑤ 垃圾回收的常见算法
- 引用计数
- 标记清除

1.2 引用计数

① 原理
- ① 每个对象都有一个引用标记,记录引用次数
- ② 如果对对象进行引用,引用标记+1
- ③ 如果取消了对对象的引用,引用标记-1
- ④ 当对象的引用标记次数为 0,就变为垃圾对象,会立即被清除。
② 优缺点:
- 优点: 垃圾对象比清除地非常及时
- 缺点: 如果两个对象互相引用,会造成两个对象常驻内存,造成内存泄漏

1.3 标记清除

① 原理
浏览器会不停地进行垃圾回收的循环,每次循环经历两个阶段:
- 标记阶段:
  从根对象开始,一层一层向下找,对所有的能找到的对象进行标记,有标记的对象成为可到达对象,没有标记的对象就是不   可到达对象,也就是垃圾对象。
- 清除阶段
  线性变量内存中所有的对象,如果对象没有标记就作为垃圾被清除。
  清除完垃圾之后,去掉所有对象的标记,继续进行下一轮的标记清除。
② 优缺点
- 优点:不会造成内存泄漏
- 缺点:需要进行深度递归遍历,垃圾回收不如引用计数方式更及时。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值