垃圾回收算法

  1. 遍历GC Root(window,DOM,栈等)标记活动对象和非活动对象
  2. 回收非活动对象所占据的内存
  3. 内存整理

新生代和老生代

在V8中,会把堆分成新生代和老生代两个区域

Scavenge 算法(新生代)

在新生代中被划分为对象区和空闲区,新加入的对象全部加入对象区,当对象区快被写满时,就要进行一次垃圾回收操作。

233526686-e6ff7885-80c1-4fa5-86bf-b3367affc303

回收过程

因为要做频繁的复制操作,所以新生代一般设置容量较小。

副垃圾回收器还会采用对象晋升策略,移动两次仍然还存在就把它移动到老生代中去。

233526851-25448ec7-81e2-46c6-af5e-d59afaeed3aa

  1. 垃圾标记
  2. 副垃圾回收器把活动对象复制到空闲区,整理
  3. 两个区做一次交换,对象区变成空闲区,空闲区变成对象区
  4. 抹掉空闲区

标记算法(老生代)

垃圾回收器的优化

垃圾回收是运行在主线程上的,所以进行垃圾回收时,会造成卡顿。

❤️ 转载文章请注明出处,谢谢!❤️