解密新一代 Java JIT 編譯器 Graal

本文思路很清晰,分兩步走。第一步,老的即時編譯的缺陷致使新的編譯器孕育而生。第二步,具體講解Graal編譯器的特性。java

老即時編譯

流程

先啓動解釋編譯,分析出解釋屢次的代碼,使用c1編譯器進行編譯,再次分析c1編譯器編譯屢次的代碼,使用c2編譯器進行編譯。安全

c2編譯器是最重要的一環,由於c2編譯出高度優化的機器碼。

缺陷

1.舊代碼難以擴展和維護
2.使用更多的JVM內聯函數,開發成本太大。函數

具體解釋第二點缺陷

JVM啓動的時候會檢測運行在哪一個處理器上,而且更具特定的處理器生成特定的內聯函數表,極大的運用了硬件的能力。這樣就致使對於特定的處理器須要特定的內聯表函數,就須要更多的內聯函數。因此致使開發成本和維護成本大。工具

新即時編譯

目標

更好的編譯Java代碼,那麼出發點就是JIT就是將字節碼轉換爲機器碼,在Java中就是從byte[]轉到另一個byte[],那麼轉換代碼可不能夠用java來寫。優化

優點

  • 工程師開發新編譯器的進入門檻要低得多。
  • 編譯器的內存安全性。
  • 可以利用成熟的 Java 工具進行編譯器開發。
  • 更快的新編譯器功能原型設計。
  • 編譯器能夠獨立於 HotSpot。
  • 編譯器可以本身編譯本身,以生成更快的 JIT 編譯版本。
相關文章
相關標籤/搜索