内存溢出和内存泄漏
内存溢出:是一种程序运行时出现的错误;当程序运行时需要的内存超过了剩余的内存时,就会抛出内存溢出的错误。
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) |
本文摘自 :https://www.cnblogs.com/