JS中存在的内存泄漏
- 什么是内存泄漏
- JS的内存管理机制
- 常见的内存泄漏
- chrome查询内存是否泄漏
- 参考博文
内存泄漏最终将导致页面反应迟缓,崩溃,高延迟
1. 什么是内存泄漏
我们知道内存是有限的,比如8G,16G, 当我们创建了一些变量,其就会在内存中的对应位置 (堆栈的概念)
栈内存一般存储基础的数据类型(Number String Null undefined Boolean Symbol)
堆内存一般存储引用类型,包括对象Object和数组Array
但是我们如果一味的往里放,再大的内存都会放满,所以一些不用的变量就会被回收。
举个例子: 家里面的仓库再大,空间也有限,总不可能一直往里塞东西吧,哈哈哈。当仓库(内存)装满的时候,还要继续往里面装,就存在内存泄漏的问题。
2. JS的内存管理机制
为了让仓库能一直放,我们在打扫卫生的时候总会扔掉一些不要用的东西,在JS中也是一样,这叫做垃圾回收机制,向C语言中一般需要通过malloc申请内存资源,然后自己手动free来清除无用资源,而JS中是自动完成这一部分的。
引用计数 垃圾回收机制(GC)
和python一样,JS的垃圾回收机制为引用计数
当我们创建一个变量的同时,就相当于引用数为1,如果当一个变量无人引用引用数为0的时候,这个变量就会被删除。
但是!如果一个变量一直被引用,就不会被自动回收机制所回收!就容易造成内存泄漏的问题
所以我们现在知道一种内存泄漏的原因,有一些变量一直在被引用而导致内存无法被释放。
3. 常见的Javascript中存在的内存泄漏
这里主要参考了这篇博文的内容:
参考博文
意外的全局变量
// example 1
function foo</