什么是内存管理
所谓内存管理,是 js 从创建变量到垃圾回收的一个过程。
它的生命周期
- 分配你所需要的内存(变量声明的时候)
- 使用分配的内存(读,写)
- 不需要的时候回收(或者释放)内存
js 的内存空间
分三种:
栈:存放变量,包括基础数据类型的变量及对象的指针
堆:存放引用数据类型的值
池:一般也归类为栈,保存常量
垃圾回收的原理
找出那些不再继续使用的变量,然后释放其占用的内存。
浏览器的垃圾回收策略
- 标记清除
- 引用计数算法
具体详见下篇文章
什么是内存泄漏?
不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)
js 中哪些操作会引发内存泄漏:
-
全局变量引起的内存泄露(例如没有使用 var, let, const 定义的变量)
解决方式: 在js文件开头添加 ‘use strict',开启严格模式。(或者一般将使用过后的全局变量设置为 null 或者将它重新赋值。 -
用完的定时器没有清除
解决方式:当不需要interval或者timeout的时候,调用clearInterval或者clearTimeout -
闭包引起的内存泄露:慎用闭包
-
dom清空或删除时,事件未清除导致的内存泄漏
-
循环引用带来的内存泄露(例如没有结束条件的递归,循环引用的对象)
网友评论