JIT(just in time)即時編譯器

JIT(just in time)

前端vs後端

在編譯原理中,一般將編譯分爲前端和後端。其中前端會對程序進行詞法分析、語法分析、語義分析,而後生成一箇中間表達形式(稱爲IR:Intermediate Representation)。後端再講這個中間表達形式進行優化,最終生成目標機器碼。前端

在Java中,javac以後生成的就是中間表達形式(.class)java

JVM在執行時,首先會逐條讀取IR的指令來執行,這個過程就是解釋執行的過程。當某一方法調用次數達到即時編譯定義的閾值時,就會觸發即時編譯,這時即時編譯器會將IR進行優化,並生成這個方法的機器碼,後面再調用這個方法,就會直接調用機器碼執行,這個就是編譯執行的過程。後端

字節碼-->機器碼:
  1. 用的時候直接翻譯(解釋器)
  2. 用的時候直接翻譯,並把經常使用的方法等緩存起來,下次再用的時候直接取用(CodeCache)

能夠經過java -XX:+PrintFlagsFinal打印出全部參數的默認值緩存

參考

  1. JVM系列之走進JIT
  2. 爲何 JVM 不用 JIT 全程編譯?
  3. JVM雜談之JIT
  4. 深刻理解Java即時編譯器(JIT)-上篇
  5. 深刻理解Java即時編譯器(JIT)-下篇
相關文章
相關標籤/搜索