【轉載】Java之什么是JIT (Just In Time)?

JIT概念

JIT:Just In Time Compiler,一般翻譯為即時編譯器,這是是針對解釋型語言而言的,而且并非虛擬機必須,是一種優(yōu)化手段,Java的商用虛擬機HotSpot就有這種技術手段,Java虛擬機標準對JIT的存在沒有作出任何規(guī)范,所以這是虛擬機實現(xiàn)的自定義優(yōu)化技術。

HotSpot虛擬機的執(zhí)行引擎在執(zhí)行Java代碼是可以采用【解釋執(zhí)行】和【編譯執(zhí)行】兩種方式的,如果采用的是編譯執(zhí)行方式,那么就會使用到JIT,而解釋執(zhí)行就不會使用到JIT,所以,早期說Java是解釋型語言,是沒有任何問題的,而在擁有JIT的Java虛擬機環(huán)境下,說Java是解釋型語言嚴格意義上已經(jīng)不正確了。

HotSpot中的編譯器是javac,他的工作是將源代碼編譯成字節(jié)碼,這部分工作是完全獨立的,完全不需要運行時參與,所以Java程序的編譯是半獨立的實現(xiàn)。有了字節(jié)碼,就有解釋器來進行解釋執(zhí)行,這是早期虛擬機的工作流程,后來,虛擬機會將執(zhí)行頻率高的方法或語句塊通過JIT編譯成本地機器碼,提高了代碼執(zhí)行的效率,至此你已經(jīng)了解了JIT在Java虛擬機中所處的地位和工作的主要內(nèi)容。

1.JIT的工作原理圖

image.png

工作原理
當JIT編譯啟用時(默認是啟用的),JVM讀入.class文件解釋后,將其發(fā)給JIT編譯器。JIT編譯器將字節(jié)碼編譯成本機機器代碼。

通常javac將程序源碼編譯,轉換成java字節(jié)碼,JVM通過解釋字節(jié)碼將其翻譯成相應的機器指令,逐條讀入,逐條解釋翻譯。非常顯然,經(jīng)過解釋運行,其運行速度必定會比可運行的二進制字節(jié)碼程序慢。為了提高運行速度,引入了JIT技術。

在執(zhí)行時JIT會把翻譯過的機器碼保存起來,已備下次使用,因此從理論上來說,採用該JIT技術能夠,能夠接近曾經(jīng)純編譯技術。

2.相關知識
JIT是just in time,即時編譯技術。使用該技術,可以加速java程序的運行速度。

JIT并不總是奏效,不能期望JIT一定可以加速你代碼運行的速度,更糟糕的是她有可能減少代碼的運行速度。這取決于你的代碼結構,當然非常多情況下我們還是可以如愿以償?shù)摹?/p>

從上面我們知道了之所以要關閉JITjava.lang.Compiler.disable(); 是由于加快運行的速度。由于JIT對每條字節(jié)碼都進行編譯,造成了編譯過程負擔過重。為了避免這樣的情況,當前的JIT僅僅對常常運行的字節(jié)碼進行編譯,如循環(huán)等

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容