写点什么

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:003436
用户头像

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

关注

评论

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

阿里巴巴《Java 开发手册》—嵩山版发布,附下载链接!

程序员生活志

Java 学习 阿里巴巴 手册

从0到1搭建大数据平台之数据采集系统

数据社

大数据 数据采集

区块链在这些生活场景中悄然落地了......

CECBC

区块链 落地应用

3行!仅3行代码就能抓取B站(弹幕、评论、用户)数据

华为云开发者联盟

数据 B站 代码 词云图 API

Flink x Zeppelin ,Hive Streaming 实战解析

Apache Flink

flink hive Zeppelin

话题讨论 | 哪本极具影响力的书,是每位程序员都应该读的?

InfoQ写作社区官方

写作平台 话题讨论

读书笔记:Google软件测试之道【一】

Man

测试 测试文化

读书笔记:Google软件测试之道【二】

Man

测试 测试文化

ElasticSearch笔记

石刻掌纹

计算机网络基础(十二)---网络层-外部网关路由协议

书旅

计算机网络 网络 协议栈 BGP

自主管理——对人性的假设

zhongzhq

自主管理 组织

从0到1搭建大数据平台之调度系统

数据社

大数据 工作流调度

架构师训练营第九周作业

一剑

企业玩转DevOps转型:由弱到强,只需7步

华为云开发者联盟

DevOps 软件工程 组织转型 软件开发 华为云

MySQL 的 crash-safe 原理解析

vivo互联网技术

MySQL 数据库 开源

JVM系列之:JIT中的Virtual Call接口

程序那些事

Java JVM JIT

什么样的服务器适合做APP?

德胜网络-阳

聚焦智慧城市生活服务,百度携手贝塔智能按下“加速键”

百度大脑

人工智能 人脸识别 AR 百度大脑 智慧城市

如何从0到1搭建大数据平台

数据社

大数据 中台

从0到1搭建大数据平台之计算存储系统

数据社

大数据 中台 计算引擎

LeetCode 328. Odd Even Linked List

liu_liu

算法 LeetCode

读书笔记:Google软件测试之道【三】

Man

测试 测试文化

两万字长文50+张趣图带你领悟网络编程的内功心法

帅旋

网络协议 TCP/IP

LeetCode题解:70. 爬楼梯,DP遍历,变量缓存结果,JavaScript,详细注释

Lee Chen

大前端 LeetCode

实时计算的业务劣势、思维误区和改进之道

KAMI

大数据 flink 方法论 实时计算

ARTS-WEEK9

一周思进

原创 | 使用JPA实现DDD持久化- O:对象的世界(1/3)

编程道与术

Java hibernate DDD JDBC jpa

30秒,2种方法解决SQL Server的内存管理问题

华为云开发者联盟

数据库 sql 内存 服务器 华为云

糟糕,你写的 BUG 要被存1000年了!

华为云开发者联盟

GitHub 开源 代码 bug 卤化银胶片

你不是说你会Aop吗?

Java旅途

成功的9大步骤:从手动测试转为自动化测试

禅道项目管理

测试 自动化测试

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