前言
js中的内存的分配和回收都是自动完成的,内存里的变量、函数在不使用的时候会被垃圾回收器回收。
内存的声明周期
- 内存分配:当我们声明变量、函数、对象的时候,系统自动分配内存
- 内存使用:读写内存
- 内存回收:使用完毕。由垃圾回收自动回收不再使用的内存
- 说明:
全局变量一般不会回收(关闭页面回收), 一般情况下局部变量的值,不用了会被回收
垃圾回收算法
垃圾回收的核心就是判断这个变量、函数已经是不再使用了。如果判断出来是垃圾就回收。反之不回收。
这里介绍两种回收算法标记清除法和引用计数法
引用计数法
IE采用的是引用计数法。定义‘内存不在使用’的标准很简单,就是看一个对象是否有指向他的引用。
算法:
- 跟踪记录每个值被引用的次数
- 如果这个值被引用了一次,那么就记录次数1
- 多次引入会累加
- 如果减少一个引用就-1
- 如果引用为0那就释放内存
标记清除法
算法:
- 将 ‘不再使用的对象’ 定义为 ‘无法达到的对象’
- 就是从根部触发定时扫描内存中的对象。凡是能从根部到达的对象,都是还需要使用的 反之回收