了解V8 GC


平时都不太会去关注这些东西,今天就了解下,夯实基础。
V8引擎: 执行js运行时的环境,他是chrome浏览器和nodejs的核心组件。
GC: 垃圾回收机制

1. 什么是垃圾回收?

垃圾回收是一种自动内存管理机制,他的主要目的是释放不再需要的内存空间。在js中,当一个变量或对象不再被引用时,那么他就变成了“垃圾”,
他就需要被回收,减轻内存压力。

2. V8 的垃圾回收策略

V8 使用了多种垃圾回收策略,主要包括:

  • 标记-清除:这是 V8 的主要垃圾回收算法。回收机制首先会标记所有的对象,然后清除未标记的对象,从而释放内存。
  • 增量标记:为了减少垃圾回收的停顿时间,V8 会将标记过程分为多个小步骤,在应用的空闲时间进行标记。
  • 年轻代和老年代:V8 将内存分为年轻代和老年代。大多数对象在年轻代中迅速分配和回收,只有长时间存活的对象才会被移动到老年代。年轻代的垃圾回收更加频繁且快速,而老年代则较少清理。
    年轻代:存放存活时间短的对象(如局部变量)
    老年代:存放存活时间长的对象(如全局变量)

3. 垃圾回收发生的时机

V8 的垃圾回收机制并不是在固定的时间间隔内触发,而是根据以下几种情况动态发生:

  • 内存压力:当 V8 检测到内存使用接近限制时,会触发垃圾回收。这通常发生在分配新的对象时,如果内存不够,回收机制首就会被调用。
  • 手动触发:代码主动调用global.gc()(仅Node.js调试环境可用)。
  • 应用空闲时间:在执行一些长时间运行的任务后,V8 会利用空闲时间进行垃圾回收,尽量减少对用户的影响。

4. 垃圾回收的影响

尽管垃圾回收能够有效管理内存,但它也会对应用性能产生影响,主要表现在以下几个方面:

  • 停顿时间:垃圾回收会导致应用短暂的停顿,尤其是在执行标记和清除操作时。V8 通过增量标记和其他技术来减少这些停顿时间。
  • 不可预测性:由于垃圾回收在内存压力和其他条件下触发,因此我们是很难预测何时会发生,这可能会导致性能波动。

5. 如何优化垃圾回收

虽然 V8 的垃圾回收机制是自动的,但还是可以采取一些措施来优化性能:

  • 避免全局变量:全局变量不容易被垃圾回收,尽量使用局部变量。
  • 合理管理对象的生命周期:尽量及时清理不再使用的对象,释放引用。

我的微信公众号: 梨的前端小屋


文章作者: 梨啊梨
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梨啊梨 !
  目录