跳到主要内容

垃圾回收

栈和堆

  • 栈中的变量在从调用栈推出上下文时进行清理
  • 堆内存垃圾回收较为复杂,见下方

垃圾回收策略

标记清除

编辑阶段为活动变量做标记,清除阶段将无标记的变量进行销毁。大部分浏览器的实现

缺点:

  • 内存碎片化,可通过标记整理解决
  • 分配速度慢
  • 定时清理,无法实时清理,

引用计数

对变量生成引用时计数加一,计数为 0 的变量进行清理,基本被抛弃

缺点:

  • 需要计数器,需要额外的内存
  • 循环引用问题

v8 优化

  • v8 在堆内存中开辟了两个区域:新生代和老生代,采取不同策略来进行 GC
  • 新生代使用 Scavenge 算法,开辟使用区和空闲区
  • 老生代使用标记清除和标记整理
  • 使用并行回收
  • 三色标记法进行增量标记和惰性清理

参考资料