IonMonkey:Firefox 的新型 JavaScript 即時編譯器
Mozilla 的猴子家族迎來新成員,開發人員宣布為長時運行 JavaScript 程序設計的 JIT(即時編譯)解析器 IonMonkey 初步完成。
Mozilla 開發人員 David Anderson 在博客中表示 Firefox 的 JavaScript 引擎 SpiderMonkey 一直以來所用的 JIT 技術(包括老的 TraceMonkey 和新的 JagarMonkey)都是直接將 JavaScript 翻譯成機器碼。相比 C++ 或者 Java 等生產環境編譯器,這都缺失了一個全局性優化的環節。
新開發的 IonMonkey 則引入了一個中間層,其工作流程如下:
- 將 JavaScript 翻譯成中間表示層 IR(Intermediate Representation)
- 使用各種算法對 IR 進行優化
- 將優化過的 IR 翻譯成機器碼
特別值得一提的是,IonMonkey 在設計之初已經充分考慮了平臺抽象化,現在已經實現對 x86、x86_64 和 ARM 指令集的支持。
David Anderson 會在接下來的博客中詳細描述在第二步中應用的優化算法,感興趣的朋友可以跟進。目前有:
- Loop-Invariant Code Motion (LICM) 循環外無用代碼移除。
- Sparse Global Value Numbering (GVN) 冗余代碼移除。
- Linear Scan Register Allocation (LSRA) 寄存器分配規劃,也被用于 HotSpot JVM 和 LLVM 中。
- Dead Code Elimination (DCE) 無用指令移除
- Range Analysis 范圍分析,移除不必要的邊界檢測
顯而易見的這些優化需要付出一定的時間代價的,所以僅在長時運行的 JavaScript 中應用,短時的 JavaScript 的 JIT 任務依然還是交給 JagarMonkey 完成。
根據 Mozilla 自己 Kraken 的測試,IonMonkey 帶來了 26% 的性能提升。
目前 IonMonkey 已經應用于 Firefox Nightly 版本中,將隨著 Firefox 18 的發布而投入廣泛使用。Firefox 18 Beta 版本將在 11 月 20 日發布。
Via Ars Technia
來自:
linuxtoy.org
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!