垃圾回收
栈和堆
- 栈中的变量在从调用栈推出上下文时进行清理
- 堆内存垃圾回收较为复杂,见下方
垃圾回收策略
标记清除
编辑阶段为活动变量做标记,清除阶段将无标记的变量进行销毁。大部分浏览器的实现
缺点:
- 内存碎片化,可通过标记整理解决
- 分配速度慢
- 定时清理,无法实时清理,
引用计数
对变量生成引用时计数加一,计数为 0 的变量进行清理,基本被抛弃
缺点:
v8 优化
- v8 在堆内存中开辟了两个区域:新生代和老生代,采取不同策略来进行 GC
- 新生代使用 Scavenge 算法,开辟使用区和空闲区
- 老生代使用标记清除和标记整理
- 使用并行回收
- 三色标记法进行增量标记和惰性清理
参考资料