写点什么

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

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

关注

评论

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

Lua 入门到精通( 02 Lua 基本语法)《做一个脚本高手》

陈皮的JavaLib

lua Linux 运维 8月日更

POM 文件中 licenses 许可证的定义

HoneyMoose

【Flutter 专题】60 图解基本 Dialog 对话框小结

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

智汇华云 | ArSDN之分布式路由及浮动IP简介

华云数据

AlphaFold2“登陆”北鲲云平台,云计算助力科研大放异彩

北鲲云

深入了解 RocketMQ 之ACL

邱学喆

签名 白名单 资源权限校验

C#多线程开发-线程同步02

Andy阿辉

C# 多线程 多线程并发 8月日更

Zookeeper集群搭建

Mike

你知道 ES6~ES12等叫法是怎么来的吗?

编程三昧

JavaScript ecmascript 8月日更

Linux之last命令

入门小站

Linux

07. 图灵测试与第一次AI浪潮

Databri_AI

人工智能

模块1-作业

笑看风雨情

网络攻防学习笔记 Day122

穿过生命散发芬芳

网络安全 8月日更

区块链技术发展趋势与银行业探索实践

CECBC

在线JSON转MySQL建表语句工具

入门小站

工具

VSCode配置JAVA开发环境

IT蜗壳-Tango

Java 9月日更

跨越AI天堑时:行动代号“盘古大模型”

脑极体

SharingSphere 源码解析 -- 真实SQL生成探索

数据库 源码

中证协组织专题座谈会,加快推进区块链技术在证券行业应用

CECBC

我遇到的那些工长

escray

生活记录 8月日更

netty系列之:自建客户端和HTTP服务器交互

程序那些事

Java Netty 程序那些事

百分点感知智能实验室:语音识别技术发展阶段探究

百分点科技技术团队

语音识别 百分点科技 感知智能

读书笔记 -《数据密集型应用系统设计》- 数据编码

KayTin

有迹可循之CheckList

编号94530

Code Review 架构设计 checklist

RTD 比率式温度测量传感器设计思路

不脱发的程序猿

学习 嵌入式 电路设计 硬件开发 ADI

Vue进阶(八十七):输入框事件 blur 与 change 的差异

No Silver Bullet

Vue 9月日更

GitHub获120w+star的JDK源码剖析手册,竟出自Alibaba高管之手?

Java 架构 面试 程序人生 Alibaba

不用手机,如何让猫给你打视频电话丨日常小技

声网

物联网 目标检测 目标跟踪

数字化时代商业银行客户触达策略研究 从数据到服务 由场景到生态

CECBC

细思极恐!Alibaba新产SpringBoot深度历险(嵩山版)开源

Java 编程 架构 面试 架构师

快手平台严管售卖“仿黄金类饰品”,直播带货在收割消费者

石头IT视角

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