内存溢出和内存泄漏
内存溢出:是一种程序运行时出现的错误;当程序运行时需要的内存超过了剩余的内存时,就会抛出内存溢出的错误。
|
1
2
3
4
|
var obj = {}for(let i = 0;i < 1000000;i++){ obj[i] = new Array(1000000)} |
个人理解:内存溢出是最终结果,即使没有编写内存泄露的代码也有可能造成内存溢出
内存泄漏:占用的内存没有及时释放,内存泄漏积累多了就容易导致内存溢出。
常见的内存泄漏
- 意外的全局变量
|
1
2
3
4
5
6
7
8
9
|
function fn(){ a = 10 console.log(a) }fn()for(let i = 0;i < 10;i++){ window[i] = i} |
- 没有及时清理的定时器
|
1
2
3
4
|
var timer = setInterval(() => { console.log('----')}, 1000)timer = null //没有及时清理的定时器 |
- 闭包
|
1
2
3
4
5
6
7
8
9
10
11
|
function fn1() { var arr = new Array[100000]; function fn2() { console.log(arr.length) } return fn2;}var f = fn1();f();f = null // 让内部函数成为垃圾对象,释放闭包 |
- 事件绑定
|
1
2
3
4
5
6
7
8
9
10
|
function fn() { var zjy = document.getElementById('zjy'); zjy.onclick = function () { alert(zjy.innerHTML); }; zjy = null; //解除引用,等待垃圾回收 alert(zjy); //null,说明已经不存在了}fn(); |
- 事件监听
|
1
2
3
4
5
6
|
function fn(){ console.log('zjy')}let zjy = document.getElementById('zjy');zjy.addEventListener('click',fn)zjy.removeEventListener(fn) |
浙公网安备 33010602011771号