大家好,我是青晚舟,之所以写这篇文章是因为最近碰到了关于内存泄漏的问题,所以特意在温习一下这方面的知识。
1.项目介绍
-
大屏可视化项目vue3 + echart
-
#准备工作首先介绍一下关于垃圾回收的两种机制
1.引用计数
引用计数最早由 Netscape Navigator 3.0 采用的,08年之前各大浏览器就是采用这种垃圾回收机 制,这种垃圾回收机制的原理就是:每一个值都会被记录被引用的次数,假如现在有一个数值A, 同时被B,C,D引用那么A的被引用次数就为3,那么下次回收机制执行到这的时候发现A的被引用 次数>0就不会被回收。这样就会导致出来的问题就是,假如现在有两个变量A和B,如果A引用了B, B同时也引用了A,那么A和B他们次数就永远都是>0,即使这个值我们现在不需要了。那垃圾回收 机制也不会去进行清理,如果这个值被多次调用,那么就会造成内存泄漏的问题。2.标记清除法
标记清除法是为了替带引用计数的一种新的垃圾回收机制,现在各大浏览器基本上都是用的这个 他的原理为:当垃圾回收程序运行的时候,他会给所有存储的变量打上一个标记,然后在次运行, 这个时候他会将已经被引用的变量进行标记去除(意思就是这个变量被别的地方引用了,那么就 打上标记),当垃圾回收机制再次运行过来的时候,那么没有被打上标记的,那就是没有被引用 的,就会被进行清除,所以这也是闭包会照成内存泄漏的一些原因。
3.#怎么预防内存泄漏
1. 通过 const 和 let 声明提升性能。因为他们都是块作用域,可以让回收机制更早介入。
2. 不使用不是关键字创建出来的变量
3.注意定时器的回调通过闭包引用外部变量造成内存泄漏
👋 写在最后
以上内容纯粹代表自己观点。顺便记录学习一下。不然记得快忘的更快。下文我们做打包速度的优化,我们下文再见。