抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

谷歌 V8 JavaScript 引擎引入新解释器 Ignition,旨在减少内存消耗

2016 年 8 月 29 日

谷歌发布了新的 JavaScript 解释器 Ignition,Chrome 53 将在一些内存有限的 Android 设备上使用它。

谷歌资深软件工程师 Ross McIlroy 在一篇博文中探讨了构建Ignition 的原因

V8 目前没有解释器。初始执行的 JavaScript 代码最先被解析,并编译成一个未优化的状态。解析器和编译器的协同工作机制会导致部分代码后续解析两次、甚至是三次。总之,按照谷歌的说法,V8 将 33% 的页面启动时间用在了解析和编译代码上。这也导致了大量的内存开销。

通过使用解释器,谷歌希望减少当前系统的内存使用。Ignition 还是依赖于一个解析器,但 JavaScript 被编译成字节码,而不是原生代码。McIlroy 表示,“我们 [使用 Ignition] 将代码编译成简洁的字节码,而不是编译成机器码,大大减少了结果代码。因此,我们可以减少系统的内存使用,对于不常运行的函数而言尤其如此。”

由于字节码较小,所以可以编译全部源代码,而不用避免编译未使用的代码。也就是说,脚本只需要解析一次,而不是像当前的编译过程那样解析多次。

McIlroy 还提供了一些技术细节:

Ignition 解释器使用低级的、体系结构无关的 TurboFan 宏汇编指令为每个操作码生成字节码处理程序。TurboFan 将这些指令编译成目标平台的代码,并在这个过程中执行低级的指令选择和机器寄存器分配。Ignition 是一个寄存器机,每个字节码都将其输入和输出指定为显式寄存器寻址;它不是一个栈式机,每个字节码消费输入,并把输出推送到一个隐式栈上。

其他浏览器供应商已经将使用解释器作为第一个步骤。Mozilla 的 SpiderMonkey 和微软的 Chakra JavaScript 引擎都是一开始就有解释器,而且它们都是连接到了一个两层的编译系统

从Chrome 53(预计在9月初发布稳定版本)开始,内存为512MB 或不足512MB 的Android 设备将开始使用Ignition。要想深入了解Ignition,请查看谷歌发布的设计文档

查看英文原文 V8’s New JavaScript Interpreter Improves Memory Consumption

2016 年 8 月 29 日 19:003055
用户头像

发布了 1008 篇内容, 共 322.2 次阅读, 收获喜欢 293 次。

关注

评论

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

一次注定失败的裸面

escray

ruby 面试题 面经 大龄程序员 面试经历

国庆假期快来了,打开8天长假的正确方式是...

老胡爱分享

读书 书籍推荐 随笔杂谈

JAVA集合之ConcurrentHashMap

彭阿三

Java JAVA集合

2020面试阿里字节跳动90%被问到的JVM面试题附答案

Java架构师迁哥

倒计时!Pulsar Summit Asia 2020 演讲征集

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

看看别人是怎么面试蚂蚁金服的!社招Java面经分享

Java架构师迁哥

Java 阿里巴巴 面试 蚂蚁金服

java安全编码指南之:异常处理

程序那些事

java安全编码 java安全 java安全编码指南

作业帮基于Apache Doris的数仓实践

StarRocks

数据库 数据仓库 数据分析 OLAP 大数据架构

DàYé玩转数据战略Step By Step

曲水流觞TechRill

数据中台 数字化

一篇文章搞定 Nginx 反向代理与负载均衡

哈喽沃德先生

nginx 负载均衡 反向代理 服务器 正向代理与反向代理

为什么90%的“码农”做不了软件“架构师”?

Java架构师迁哥

Java 学习 架构师

你在开发过程中使用Git Rebase还是Git Merge?

华为云开发者社区

git 华为 管理 代码

Go编程(二) 多线程简单斗地主

dongfanger

go 编程 开发

Java源码系列1——ArrayList

超超不会飞

Java

图解 K8S 源码 - Deployment Controller 篇

郭旭东

Kubernetes Kubernetes源码

信息公交服务在滴滴的应用实践

滴滴技术

滴滴技术 人工只能 信息公交 路径优化

StreamNative 宣布开源 MoP:Apache Pulsar 支持原生 MQTT 协议

Apache Pulsar

开源 云原生 mqtt Apache Pulsar 消息中间件

奈学:Java 和 JavaScript 是什么关系?

奈学教育

Java

数据挖掘技术在轨迹数据上的应用实践

滴滴技术

人工智能 数据挖掘 滴滴技术 轨道技术 创新公交

10多家公司的Java开发面试常见问题合集

Java架构师迁哥

架构师第一期作业(第三周)

Cheer

作业

奈学:Java 和 JavaScript 是什么关系?

古月木易

Java

初学源码之——Spring IOC 应用

Java架构师迁哥

点对点音视频应用场景及优势

anyRTC开发者

音视频 WebRTC 直播 RTC 安卓

华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?

华为云开发者社区

数据库 数据 gauss db

线段树(Segment Tree)

zayfen

算法 线段树 segment tree

聊一下《技术力量-一线技术团队成功启示录》

Man

中台 研发管理

为什么推广ipv6以及网站ipv6改造基本步骤

MySQL从删库到跑路

Web IP 网络

架构师训练营第三周学习总结

邓昀垚

极客大学架构师训练营

浅谈滴滴需求响应式公交背后的技术

滴滴技术

滴滴技术 创新公交 路径优化

打造一个全功能的浏览器

Daniel

Study Go: From Zero to Hero

Study Go: From Zero to Hero

谷歌V8 JavaScript引擎引入新解释器Ignition,旨在减少内存消耗-InfoQ