wtw's Frontend

道阻且长,行则将至💪🏻

0%

think of v8

v8

垃圾回收机制

使用分代回收策略,分为新、老生代.

  • 新生代: 新生代的堆内存被分为多个 SemiSpace 空间,每个 SemiSpace 分为两部分 from 和 to,分配对象空间时,只在 from 中分配,to 是闲置的,垃圾回收机制会按照以下步骤:
    • 查找 from 中还存活的对象,将其全部移入到 to
    • 反转 from 和 to
    • 对 to 尽数回收
  • 新生代 -> 老生代
    • 新生代垃圾回收机制中,from 中的对象经过多次复制依然还存活,就将其移入老生代
    • 在反转 from 和 to 的过程中,如果 to 空间的使用量超过了 25%,那么 from 中的对象全部移入老生代
  • 老生代
    • 标记删除: 对象已死亡,会直接被剃掉删除
    • 标记合并: 将存活的对象移到一边,将被回收的对象移到另一边,直接对可被回收的区域进行整体的垃圾回收