爲何 JVM 不用 JIT 全程編譯?

考慮到跨平臺,因此沒法使用AOT;優化

考慮到執行效率,因此沒法所有使用JIT;翻譯

 

編譯技術大約分爲兩種,一種AOT,只線下(offline)就將源代碼編譯成目標機器碼,這是廣泛用在系統程序語言中;另外一種是JIT,只及時的編譯,可是大部分的JIT引擎,針對的是將IR(中間代碼,如JavaByteCode) 在運行時, 有針對性的翻譯成機器碼。io

對於JIT咱們必須認識到,JIT不是簡單的講字節碼翻譯成機器碼。一個JIT引擎要想快,主要取決於:1. 經過蒐集runtime信息,識別出程序的熱點(2/8原則)2. 最重要的一點,根據信息實時優化技術的使用。相反,JIT並不單單是個字節碼到機器碼的直譯機器。編譯

那麼樓主疑問,爲什麼不直接所有翻譯成機器碼了?要回答這個問題,必需要提到如下兩個觀點:1.JIT是重型優化,自己overhead很大. 2. 最重要的,現代JIT技術必須依賴runtime信息,但要獲得runtime信息,程序必須執行.下面稍微解釋一下.效率



做者:dianpeng
連接:https://www.zhihu.com/question/37389356/answer/72460624
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。程序

相關文章
相關標籤/搜索