Skip to content
目录

JS垃圾回收机制

浏览器:

引用计数法

引用计数法:对象被引用一次引用次数就 +1,引用次数为0 后,垃圾回收运行时清理掉次数为0 的

  • 优点:引用计数只需要在计数为0 时就可以回收,不需要遍历所有对象
  • 缺点:计数器需要占很大的空间,无法解决循环引用无法回收的问题

标记清除法

标记清除法:定期将活动对象和不活动的对象进行分别标记,然后开始清除工作,最后还原标记,等待 下一轮清除工作

  • 优点:算法简单,
  • 缺点:(内存碎片化,分配速度慢)清除后剩余的对象内存位置不变,导致空闲内存空间不连续,出现了内存碎片

标记整理算法在标记结束后,将活动对象往内存一边移动

分代式回收

V8回收机制优化:

分代式垃圾回收

  1. 新生代回收:Scavenge算法、Cheney算法,Cheney算法将新生代内存一分为二,使用区和空闲区, 对活动区的对象进行标记,清理,活动区和空闲区身份互换,交换两次后,将活动区还在的老对象 放到老生代,如果交换后空闲区超过25%,将会把对象都放到老生代
  2. 老生代:存放一些空间大、存活时间长,如果放在新生代频繁复制交换,会非常耗时;老生代使用 标记清除法,进行清除,排序整理,标记整理 并行回收,读写锁 全停顿,增量标记、三色标记、写屏障 惰性清理

新生代

老生代

并行回收

增量标记

三色标记法

写屏障

惰性清理

并发回收

参考文档

Released under the MIT License.