写点什么

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

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

关注

评论

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

黑客进行网络欺骗攻击的手段有哪些?

喀拉峻

黑客 网络安全 安全

CSS之选择器(七):empty

Augus

CSS 12月日更

低代码如何让中小型企业蓬勃发展?

低代码小观

低代码 企业管理系统 低代码平台 中小企业

滨海中小企业协会参加新区工商联(总商会)第四次代表大会

InfoQ 天津

行业分析| 泛娱乐应用出海探索

anyRTC开发者

音视频 语音通话 视频直播 视频通话 泛娱乐

使用kubernetes,你真的降本了吗

Geek_cd6rkj

Docker Kubernetes 云原生 成本治理 提效降本

「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配

尔达Erda

大数据 spark 程序员 云原生 心得

开发者故事|朝九晚六大小周,我就是快乐的技术人

尔达Erda

程序员 云原生 经验分享 成长笔记 思考路径

Istio在Rainbond Service Mesh体系下的落地实践

北京好雨科技有限公司

istio PaaS rainbond

Android C++系列:Linux Socket编程(三)CS模型示例

轻口味

28天写作 12月日更

优秀的代码的分层结构

xcbeyond

架构 28天写作 12月日更

一周信创舆情观察(12.6~12.12)

统小信uos

从0开始学VUE - 运行第一个VUE项目

恒生LIGHT云社区

JavaScript node.js Vue 前端

英特尔深耕元宇宙算力技术,剑指开“元”盛世

科技新消息

最好用的七大顶级 API 接口测试工具

蒋川

API 测试工具

公安合成作战平台建设解决方案,情指勤一体化合成作战系统搭建

电微13828808271

【实战】网络安全学习:内网渗透实例

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 内网渗透

TDengine典型用户案例|内容合集

TDengine

tdengine 时序数据库 技术专题合集

基于社交网络的客户智能 ( AI ) 推荐系统研究

索信达控股

推荐系统 推荐算法 个性化推荐

聚势聚能,共擎共飞 PKS安全先进计算2021生态大会将启

InfoQ 天津

西南林业大学:用宜搭打造智慧校园,节省百万费用

一只大光圈

钉钉 低代码 数字化 高校 钉钉宜搭

利用Java反射处理private变量

FunTester

Java 工具 反射 Groovy FunTester

企业数字化的4个痛点,低代码平台如何解决?

J2PaaS低代码平台

低代码 数字化 低代码平台

哪些企业需要做等保测评?快速过等保测评用什么堡垒机好呢?

行云管家

网络安全 等保 等保测评 等保2.0

自身的强大,无惧任何威胁!

Tiger

28天写作

Rainbond 5.5 发布,支持Istio和扩展第三方Service Mesh框架

北京好雨科技有限公司

istio PaaS rainbond

多点 DMALL x StarRocks:实现存储引擎的收敛,保障高查询并发及低延迟要求

StarRocks

数据库 数据分析 高并发 StarRocks

【量化】用数据验证巴菲特推荐的指数定投的收益真相

恒生LIGHT云社区

数据 金融科技 量化投资 量化

DotNet项目利用拦截器记录访问日志

为自己带盐

日志 dotnet 28天写作 12月日更

公安情报研判分析系统开发,情指勤一体化实战平台

电微13828808271

Explore the Sky丨来 TiDB Hackathon 2021 探索无限可能

PingCAP

Go 数据库 hackathon TiDB database

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