IonMonkey:Firefox 的新型 JavaScript 即时编译器

jopen 12年前
   <p> Mozilla 的猴子家族迎来新成员,开发人员宣布为长时运行 JavaScript 程序设计的 JIT(即时编译)解析器 IonMonkey 初步完成。</p>    <p> <a href="/misc/goto?guid=4958524114122937818" target="_blank">Mozilla 开发人员 David Anderson 在博客中</a>表示 Firefox 的 JavaScript 引擎 SpiderMonkey 一直以来所用的 JIT 技术(包括老的 TraceMonkey 和新的 JagarMonkey)都是直接将 JavaScript 翻译成机器码。相比 C++ 或者 Java 等生产环境编译器,这都缺失了一个全局性优化的环节。</p>    <p> 新开发的 IonMonkey 则引入了一个中间层,其工作流程如下:</p>    <ul>     <li>将 JavaScript 翻译成中间表示层 IR(Intermediate Representation)</li>     <li>使用各种算法对 IR 进行优化</li>     <li>将优化过的 IR 翻译成机器码</li>    </ul>    <p>特别值得一提的是,IonMonkey 在设计之初已经充分考虑了平台抽象化,现在已经实现对 x86、x86_64 和 ARM 指令集的支持。</p>    <p> David Anderson 会在接下来的博客中详细描述在第二步中应用的优化算法,感兴趣的朋友可以跟进。目前有:</p>    <ul>     <li>Loop-Invariant Code Motion (LICM) 循环外无用代码移除。</li>     <li>Sparse Global Value Numbering (GVN) 冗余代码移除。</li>     <li>Linear Scan Register Allocation (LSRA) 寄存器分配规划,也被用于 HotSpot JVM 和 LLVM 中。</li>     <li>Dead Code Elimination (DCE) 无用指令移除</li>     <li>Range Analysis 范围分析,移除不必要的边界检测</li>    </ul>    <p>显而易见的这些优化需要付出一定的时间代价的,所以仅在长时运行的 JavaScript 中应用,短时的 JavaScript 的 JIT 任务依然还是交给 JagarMonkey 完成。</p>    <p> 根据 <a href="/misc/goto?guid=4958319753376523847" target="_blank">Mozilla 自己 Kraken 的测试</a>,IonMonkey 带来了 26% 的性能提升。</p>    <p> 目前 IonMonkey 已经应用于 <a href="/misc/goto?guid=4958197068631690686" target="_blank">Firefox Nightly 版本</a>中,将随着 Firefox 18 的发布而投入广泛使用。Firefox 18 Beta 版本将在 11 月 20 日发布。</p>    <p> Via <a href="/misc/goto?guid=4958524114278681701" target="_blank">Ars Technia</a></p>    <div id="come_from">    来自:     <a id="link_source2" href="/misc/goto?guid=4958524114380847188" target="_blank">linuxtoy.org</a>    </div>