JIL 編譯與 AOT 編譯

JIT:Just-in-time compilation,即時編譯;AOT:Ahead-of-time compilation,事前編譯。jvm

JVM即時編譯(JIT)性能

1. 動態編譯與靜態編譯

  • 動態編譯(dynamic compilation)指的是「在運行時進行編譯」;與之相對的是事前編譯(ahead-of-time compilation,簡稱AOT),也叫靜態編譯(static compilation)。優化

  • JIT 編譯狹義來講是當某段代碼即將第一次被執行時進行編譯,於是叫「即時編譯」,JIT 編譯是動態編譯的一種特例。JIT編譯一詞後來被泛化,時常與動態編譯等價;但要注意廣義與狹義的JIT編譯所指的區別。.net

  • 自適應動態編譯(adaptive dynamic compilation)也是一種動態編譯,但它一般執行的時機比 JIT 編譯遲,先讓程序「以某種式」先運行起來,收集一些信息以後再作動態編譯。這樣的編譯能夠更加優化。blog

2. JVM 運行原理


這裏寫圖片描述

在部分商用虛擬機中(如 HotSpot),Java 程序最初是經過解釋器(Interpreter)進行解釋執行的,當虛擬機發現某個方法或代碼塊的運行特別頻繁時,就會把這些代碼認定爲「熱點代碼」。爲了提升熱點代碼的執行效率,在運行時,虛擬機將會把這些代碼編譯成與本地平臺相關的機器碼,並進行各類層次的優化,完成這個任務的編譯器稱爲即時編譯器(Just In Time Compiler,下文統稱JIT編譯器)。圖片

即時編譯器並非虛擬機必須的部分,Java虛擬機規範並無規定Java虛擬機內必需要有即時編譯器存在,更沒有限定或指導即時編譯器應該如何去實現。可是,即時編譯器編譯性能的好壞、代碼優化程度的高低倒是衡量一款商用虛擬機優秀與否的最關鍵的指標之一,它也是虛擬機中最核心且最能體現虛擬機技術水平的部分。get

因爲Java虛擬機規範並無具體的約束規則去限制即便編譯器應該如何實現,因此這部分功能徹底是與虛擬機具體實現相關的內容,如無特殊說明,咱們提到的編譯器、即時編譯器都是指 Hotspot 虛擬機內的即時編譯器,虛擬機也是特指 HotSpot 虛擬機。編譯器

相關文章
相關標籤/搜索