Skip to main content

GC缺陷与优化

和其他语言一样 GC 会中断代码执行,停止其他操作。因为要遍历所有对象,回收所有不可访问对象,这个操作的耗时可能有 100ms 以上。在 V8 引擎新版本中引入了两种优化方法:

  1. 分代回收(Generation GC):目的是通过对象的使用频率、存在时长区分新生代与老生代对象。多回收新生代区(young generation),少回收老生代区(tenured generation),减少每次需遍历的对象,从而减少每次 GC 的耗时。
  2. 增量回收(Increment GC):把需要长耗时的遍历、回收操作拆分运行,减少中断时间,但是会增大上下文切换开销。有点类似于 react fiber 的设计思想。