垃圾回收和内存泄露

垃圾回收机制

什么是垃圾回收机制 JS中内存的分配和回收都是⾃动完成的,内存在不使⽤的时候会被垃圾回收机制⾃动回收[]

内存的⽣命周期

js环境中分配的内存,有如下⽣命周期:

内存分配 :声明变量,函数,对象的时候,系统会⾃动为他们分配内存

内存使⽤: 既读写内存,使⽤变量 ,函数等 内存回收: 使⽤完毕,由内存回收器 ⾃动回收不再使⽤的内存

说明:

全局变量⼀般不会回收(关闭⻚⾯回收)

⼀般情况下局部变量的值,不⽤了,会被⾃动回收掉 内存泄漏:程序中分配的内存由于某种原因程序未释放或⽆法释放 叫做内存泄漏

有两种实现算法:
引⽤计数法:

引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用次数加 1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数减 1。当这个值的引用次数变成 0 时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾回收器下次再运行时,它就会释放那些引用次数为 0 的值所占用的内存。

标记清除法:

js中最常用的垃圾回收方式就是标记清除。当变量进入环境时,例如,在函数中声明一个变量,就将这个变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标记为“离开环境”。

内存泄漏

程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于持续运行的服务进程(daemon),必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。

Vue 中的内存泄漏问题

如果在mounted/created钩子中使用 JS 绑定了DOM/BOM对象中的事件,需要在 beforeDestroy中做对应解绑处理; 如果在 mounted/created钩子中使用了第三方库初始化,需要在 beforeDestroy中做对应销毁处理(一般用不到,因为很多时候都是直接全局 Vue.use); 如果组件中使用了 setInterval,需要在 beforeDestroy中做对应销毁处理;

js中的内存泄漏

1. 循环引用

2. 闭包

在闭包中引入闭包外部的变量时,当闭包结束时此对象无法被垃圾回收(GC)。

3. DOM泄露

当原有的COM被移除时,子结点引用没有被移除则无法回收。

4. Timers计(定)时器泄露

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值