浏览器垃圾回收机制

191 阅读1分钟

浏览器垃圾回收机制

垃圾回收策略有两种

  • 标记清除: 标记阶段即为所有活动对象加上标记,清除阶段则把没有标记(非活动对象)销毁。
  • 引用计数:对象是否不需要简化定义为对象有没有其他对象引用它。如果没有引用指向该对象(引用计数为0),对象将被垃圾回收机制回收。

标记清除的缺点

  • 内存碎片化: 空闲内存块是不连续的,容易出现很多空闲内存块,还可能出现分配所需内存过大的对象时找不到合适的块。
  • 分配速度慢: 因为即使使用First-fit策略,其操作仍是一个O(n)操作,最坏情况是每次都要遍历到最后,同时因为碎片化,大对象的分配效率会更慢。

解决以上缺点可使用标记整理(Mark-Compact)算法, 标记结束后,标记整理算法会将活着的对象(即不需要清理的对象)向内存的一端移动,最后清理掉边界的内存。

image.png #### 引用计数缺点
  • 需要一个计数器,所占内存空间大,因为不知道被引用数量的上限。
  • 解决不了循环引用导致的无法回收问题。

V8的垃圾回收机制也是基于标记清除算法,不过对其进行了一些优化。

  • 针对新生区采用并行回收
  • 针对老生区采用增量标记与惰性回收。