博客
关于我
不妨进来瞧一瞧V8引擎
阅读量:528 次
发布时间:2019-03-08

本文共 1353 字,大约阅读时间需要 4 分钟。

认识 V8 引擎:内存管理与垃圾回收优化

V8 是现代 JavaScript 的高性能执行引擎,广泛应用于Chrome 浏览器和 Node.js 等多个平台。它的高效运行离不开先进的内存管理和垃圾回收机制。本文将深入探讨 V8 的内存管理策略及其垃圾回收算法。

V8 内存管理的关键设置

V8 对内存空间进行严格管理,通常在 64 位操作系统上设置内存上限为 1.5 GB(对于 32 位系统则为 800 MB)。这一限制主要考虑到网页应用的实际需求。

  • 内存分区划分

    • V8 将内存划分为 "新生代"(用于存活时间较短的对象)和 "老生代"(用于存活时间较长的对象)。
      • 新生代对象通常局部作用域内创建,如函数局部变量、事件处理器等。
      • 老生代对象则涉及全局变量、闭包链等高级别 JS 结构。
  • 垃圾回收机制

    值得注意的是,V8 采用分代回收(:disable-generation-CTS)策略:

    • 新生代回收:采用复制算法( copying algorithm)+ 标记整理(compaction)。
    • 老生代回收:采用标记清除(mark sweep)+ 标记整理(compaction)+ 增量标记(incremental marking)。
      这种划分使垃圾回收过程更加高效。
  • V8 垃圾回收的具体流程

    新生代对象回收

    • 内存划分:新生代占用小空间(典型为 17 MB),适合存放存活时间短的对象。
    • 回收流程
    • 将新生代空间划分为 "From" 空间(存放新对象)和 "To" 空间(备用空间)。
    • 当 "From" 空间逐渐饱和时,触发 GC(Garbage Collection)。
    • 复制阶段(copying phase):将活性对象从 "From" 拷贝至 "To"。
    • 整理阶段(compaction phase):释放 "From" 空间,并合并碎片至 "To"。

    老生代对象回收

    • 内存划分与限制:老生代区域内存上限通常为 1.4 GB(64 位系统)。
    • 回收流程
    • 使用标记清除清理无用对象。
    • 如需扩展存储空间时,触发整理(compaction)以打平内存碎片,提升空间利用率。
    • 采用增量标记技术优化标记效率。

    V8 垃圾回收的优化策略

  • 新生代优化

    • 复制算法:通过预留空闲空间(To 空间),确保快速复制对象。
    • 晋升机制(promotion):存活时间较长的新生代对象(超过 25%capacity)会被转移到老生代存储区,以便释放新生代空间。
  • 老生代优化

    • 标记清除+整理:虽耗时较长,但适合处理存储密集型对象。
    • 碎片整理(compaction):必要时进行整体空间重组,减少碎片化问题。
  • V8 垃圾回收的优势

    • 新生代管理:通过空间换时间策略,虽然会产生一定的内存浪费,但对用户体验影响极小。
    • 老生代管理:虽然复制算法在大型空间难以利用,但老生代对象的复杂性使标记清除算法成为更优选择。

    V8 垃圾回收的总结

    V8 凭借其分代回收机制和灵活的垃圾回收算法,实现了高效的内存管理和垃圾清理。通过合理设置内存上限、采用分代策略以及多种 GC 算法的结合,V8 在 JavaScript 引擎领域展现了卓越的性能优势。这一技术选择不仅适用于浏览器,还为其他渠道的 JavaScript 应用提供了可靠的基础。

    转载地址:http://pmwiz.baihongyu.com/

    你可能感兴趣的文章
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>