js 内存管理机制

什么是内存管理

所谓内存管理,是 js 从创建变量到垃圾回收的一个过程。

它的生命周期

  1. 分配你所需要的内存(变量声明的时候)
  2. 使用分配的内存(读,写)
  3. 不需要的时候回收(或者释放)内存

js 的内存空间

分三种:

  • 栈:存放变量,包括基础数据类型的变量及对象的指针
  • 堆:存放引用数据类型的值
  • 池:一般也归类为栈,保存常量

垃圾回收的原理

找出那些不再继续使用的变量,然后释放其占用的内存。

浏览器的垃圾回收策略

  1. 标记清除:当变量进入引用坏境时标记为“进入环境”,离开引用环境时标记为“离开环境”,垃圾回收器运行时把标记为“离开环境”的变量回收掉,完成内存清除的工作。标记的方式有很多种(浏览器内部会做的),比如翻转某个特殊位,再或者使用一个“进入环境”的变量列表和“离开环境”的变量列表来记录。从2012年起,所有现代浏览器都使用了标记-清除垃圾回收算法。
  2. 引用计数算法:简单说就是,有引用时 +1,没有引用 -1,引用计数为 0 时回收。那么就有了循环引用的对象不能被回收的情况,因为它的引用计数永远不能为 0,除非手动把引用置为 null

什么是内存泄漏

不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)

js 中哪些操作会引发内存泄漏:

  • 闭包
  • 用完的定时器没有清除
  • 死循环(例如没有结束条件的递归,循环引用的对象)
  • 意外的全局变量(例如没有使用 var, let, const 定义的变量)
  • 被移除的DOM节点上的绑定事件没有清除

你可能感兴趣的:(js 内存管理机制)