JS垃圾回收机制
前言
先介绍根的概念:
- 全局变量
- 函数中的局部变量和参数
这些直接能访问的到的变量称之为根。
标记清除法
基础的垃圾回收方法是标记清除法
JS引擎会先从根开始标记,然后通过这些变量的引用访问被引用的变量并标记这些变量,直到没有引用变量可以访问。
然后,会将内存中无法到达的变量(即没有标记的变量)进行回收,释放他们的内存。
一些优化
- 分代回收:将对象分为“新对象”和“旧对象”。“新对象”是指生命周期短,执行快的对象;“旧对象”指生命周期长的对象,在内存里长期存在,相比“新对象”JS引擎会减少对“旧对象”可达性的检查。
- 增量回收:当内存中的变量很多时,一次性遍历完非常耗时。因此,将这些变量划分为几个部分,这几个部分分别进行回收。
- 空闲时间回收:JS引擎仅在CPU空闲的时候进行垃圾回收,不影响执行效率。
参考博文:https://segmentfault.com/a/1190000018605776