js高级 垃圾回收机制

113 阅读1分钟

前言

js中的内存的分配和回收都是自动完成的,内存里的变量、函数在不使用的时候会被垃圾回收器回收。

内存的声明周期

  1. 内存分配:当我们声明变量、函数、对象的时候,系统自动分配内存
  2. 内存使用:读写内存
  3. 内存回收:使用完毕。由垃圾回收自动回收不再使用的内存
  4. 说明:

全局变量一般不会回收(关闭页面回收), 一般情况下局部变量的值,不用了会被回收

垃圾回收算法

垃圾回收的核心就是判断这个变量、函数已经是不再使用了。如果判断出来是垃圾就回收。反之不回收。
这里介绍两种回收算法标记清除法引用计数法

引用计数法

IE采用的是引用计数法。定义‘内存不在使用’的标准很简单,就是看一个对象是否有指向他的引用。
算法:

  1. 跟踪记录每个值被引用的次数
  2. 如果这个值被引用了一次,那么就记录次数1
  3. 多次引入会累加
  4. 如果减少一个引用就-1
  5. 如果引用为0那就释放内存
标记清除法

算法:

  1. 将 ‘不再使用的对象’ 定义为 ‘无法达到的对象’
  2. 就是从根部触发定时扫描内存中的对象。凡是能从根部到达的对象,都是还需要使用的 反之回收