[关闭]
@lsmn 2016-08-26T03:19:26.000000Z 字数 1072 阅读 2307

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

谷歌 V8 JavaScript


摘要

谷歌V8 JavaScript引擎有了一个新解释器,名为Ignition。他们希望借此减少编译器的内存消耗,并降低复杂性。Chrome 53将开始在内存为512MB或不足512MB的Android设备上使用Ignition。

正文

谷歌发布了新的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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注