10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能

York

云原生 网络 cni

通用池化框架实践之GenericKeyedObjectPool

FunTester

flask框架学习总结(四)【 文件上传,实现最小应用,路径变量,模板继承】

恒山其若陋兮

5月月更

小程序如何实现一键转换成App

Geek_99967b

小程序容器 小程序转app

Linux环境编译动态库

Loken

音视频 5月月更

聚焦无障碍阅读,福昕捐出2000套福昕高级PDF编辑器

联营汇聚

开发一个社区网站,只要20分钟?

华为云开发者联盟

ide 敏捷开发 devcloud 网站开发

小程序怎样一键转化成APP

Geek_99967b

小程序生态 小程序容器 小程序转app

在线文本删除空行工具

入门小站

工具

微信视频号严查教育招生类账号:应该抵制恶意网络营销

石头IT视角

1.2架构的定义(一)

凌晞

架构 架构设计

HDFS 细粒度锁优化,FusionInsight MRS有妙招

华为云开发者联盟

hdfs NameNode 元数据 FusionInsight MRS FGL

技术立根,行业立范,发展立本:中国工业互联网的2.0新征程

脑极体

Kernel SIG直播:关于 Plugsched 调度器热升级 | 第 18 期

OpenAnolis小助手

Linux 直播 内核 sig 龙蜥大讲堂

IoT技术的最后决战!百万大奖究竟花落谁家?

华为云开发者联盟

IoT 华为云 iotda NSBD-IOT

开发者的福音 提前为你揭秘2022鲲鹏开发者创享日武汉站

极客天地

linux之curl命令

入门小站

Linux

在线HTML转SQL工具

入门小站

工具

模块2-微信朋友圈高性能复杂度分析

Fan

架构实战营

又一国际知名律师事务所选择福昕PDF

联营汇聚

Linux 使用 cp 命令强制覆盖功能

AlwaysBeta

Linux 运维

使用 awk 命令统计文本

程序员小航

后端 awk Linxu

软件开发的核心原则

宇宙之一粟

软件设计原则 5月月更

发布订阅模式和观察者模式【vue】

达摩

Vue 观察者模式 发布订阅

做一个能对标阿里云的前端APM工具

光毅

阿里云 性能优化 前端

云原生时代,热门监控工具对比与使用场景分析

云智慧AIOps社区

云原生 监控 Grafana Prometheus 监控宝

vue + electronの文件读写

空城机

Electron 5月月更

P2P传输模式

工程师日月

计算机网络 5月月更

前沿聚焦:2022最受关注的六大技术热词,你都知道吗?

华为云开发者联盟

零代码 NFT 数字人 元宇宙 云边端协同

Java Core「4」java.util.concurrent 包简介

Samson

学习笔记 5月月更 Java core

vue响应式原理简述

达摩

Vue vue源码解读

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