2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

V8 引擎内存消耗的分析和优化

  • 2016-10-17
  • 本文字数:990 字

    阅读完需:约 3 分钟

在过去的几个月,V8 团队一直致力于降低 V8 引擎内存消耗的工作,主要内容包括推出新的 Ignition 解释器以及对 V8 解析器和编译器的改进。来自 V8 的工程师 Ulan Degenbaev、Michael Lippautz、Hannes Payer 和 Toon Verwaest 说明了这次工作的主要目标之一是根据测试基准使用特别的工具对 V8 的内存使用情况进行分析。

为了减少 V8 的内存占用,V8 团队利用 Chrome 54 版本的新特性对 V8 引擎的两个堆内存进行监控(C++ 堆和 JavaScript 堆)。Chrome 的这个新特性提供了–trace–gc-object-stats 标记,使用这个标记可以把 V8 的内存统计信息输出到控制台,然后使用 V8 heap visualizer 这个自制工具对输出的信息进行可视化,它会把两个堆的时间线视图以及对特定数据类型内存使用情况的详细分析结果展示出来。V8 团队还使用 Chrome 提供的另一个工具 Trace Event Profiling Tool 来分析内存,这个工具可以通过 about:tracing 来启动。

内存分析的结果告诉我们,垃圾回收器的延迟和内存消耗之间的平衡是决定 JavaScript 堆内存大小的因素之一。为堆保留更多的内存可以避免频繁的 GC,从而减少延迟。不过这对于低内存的设备来说会是个问题,它会导致设备崩溃或让应用程序挂起。为了达到延迟和内存消耗之间的平衡,V8 团队引入了一种新的内存缩减模式,这个模式会触发更频繁的垃圾回收,并通过更有效的压缩来减少内存碎片。从一个测试基准可以看到,新的模式总共可以把 V8 堆内存缩减 50%。引入的另一个优化措施是把 V8 的堆页面大小从 1M 减到 512K,有助于改善整体内存使用以及减少内存碎片。

V8 团队通过改进后台的解析任务来减小 C++ 的堆内存,这种改进可以让 V8 在网页加载过程中解析脚本。实际上,就像内存可视化工具所展示的那样,后台解析器会在代码编译后的很长一段时间内仍然保留着一块活跃的堆区域,而不是马上把它释放掉。另外,V8 解析器现在使用一种更有效的策略来压缩保存在语法树节点里的字段,而之前使用的是标准的 C++ 压缩。测试基准表明,峰值区域的内存缩减平均可以达到 40% 左右。

上面所描述的所有改进将出现在 Chrome 55 版本里,希望今年 12 月份可以放出。

查看英文原文: Profiling and Optimizing V8 Memory Consumption


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-10-17 19:003889
用户头像

发布了 322 篇内容, 共 158.4 次阅读, 收获喜欢 148 次。

关注

评论

发布
暂无评论
发现更多内容

LabVIEW控制Arduino实现示波器(基础篇—7)

不脱发的程序猿

单片机 LabVIEW Arduino LIAT Arduino实现示波器

LabVIEW控制Arduino实现模拟数据采集(基础篇—8)

不脱发的程序猿

单片机 LabVIEW Arduino LIAT 模拟数据采集

使用 Provider 搞定 Flutter 的局部刷新

岛上码农

flutter ios 前端 安卓开发 5月月更

客观的聊一聊,裁员这件糟心事

互联网 职场 裁员

JAVA SPI机制

源字节1号

【LeetCode】检查句子中的数字是否递增Java题解

Albert

LeetCode 5月月更

模块2作业

Geek_701557

值得收藏:当向数据库导入大量数据时,mysql主键唯一键重复插入,如何丝滑操作并不导入重复数据呢

迷彩

MySQL 数据库 大数据运维 5月月更

OpenMLDB 实时引擎性能测试报告

第四范式开发者社区

人工智能 机器学习 数据库 性能分析 特征平台

JAVA什么是反射?

源字节1号

软件开发

GitOps自问自答

俞凡

最佳实践 研发效能 gitops

解析数仓lazyagg查询重写优化规则

华为云开发者联盟

数据库

Sa-Token 单点登录 SSO模式二 URL重定向传播会话示例

Java 登录验证 SaToken

贪心算法:Dota2 参议院 🏯

空城机

LeetCode 5月月更

对于编程思想和能力有重大提升的书有哪些?

宇宙之一粟

书单推荐 编程思想 5月月更

全链路压测(十四):生产全链路压测SOP

老张

性能测试 全链路压测 稳定性保障

哈希能作弊吗?哈希竞猜游戏防作弊系统开发逻辑(稳定运营)

开发微hkkf5566

带你读顶会论文丨基于溯源图的APT攻击检测

华为云开发者联盟

安全

LabVIEW控制Arduino实现RGB调色灯(基础篇—6)

不脱发的程序猿

单片机 LabVIEW Arduino LIAT RGB调色灯

LabVIEW控制Arduino实现舵机联控(基础篇—9)

不脱发的程序猿

单片机 LabVIEW Arduino LIAT 舵机联控

leetcode 153. Find Minimum in Rotated Sorted Array 寻找旋转排序数组中的最小值(中)

okokabcd

LeetCode 查找

借势双碳东风:干“实事”的“虚拟”电厂

脑极体

微信朋友圈的复杂度

爱晒太阳的大白

什么是区块哈希?哈希趣投娱乐竞猜游戏开发逻辑(成熟源码)

开发微hkkf5566

云图说丨每个成功的业务系统离不开API网关(APIG)的保驾护航

华为云开发者联盟

云计算 华为云 API网关 业务系统 APIG

架构实战营模块2课后作业

Geek_53787a

三、KVM管理工具

穿过生命散发芬芳

kvm 5月月更

带你认识String类

开发微hkkf5566

高性能 PHP 应用容器之 Workerman

CRMEB

Java设计模式系列学习

梁歪歪 ♚

设计模式

V8引擎内存消耗的分析和优化_JavaScript_Sergio De Simone_InfoQ精选文章