Categories
程式開發

Java即時編譯器原理解析及實踐


跟其他常見的編程語言不同,Java將編譯過程分成了兩個部分,這就對性能帶來了一定的影響。而即時(Just In Time, JIT)編譯器能夠提高Java程序的運行速度。
本文會先解析一下即時編譯器的原理,然後再分享一些在美團實踐的經驗,希望能對大家有所幫助或者啟發。

一、導讀

常見的編譯型語言如C++,通常會把代碼直接編譯成CPU所能理解的機器碼來運行。而Java為了實現“一次編譯,處處運行”的特性,把編譯的過程分成兩部分,首先它會先由javac編譯成通用的中間形式——字節碼,然後再由解釋器逐條將字節碼解釋為機器碼來執行。所以在性能上,Java通常不如C++這類編譯型語言。

為了優化Java的性能,JVM在解釋器之外引入了即時(Just In Time)編譯器:當程序運行時,解釋器首先發揮作用,代碼可以直接執行。隨著時間推移,即時編譯器逐漸發揮作用,把越來越多的代碼編譯優化成本地代碼,來獲取更高的執行效率。解釋器這時可以作為編譯運行的降級手段,在一些不可靠的編譯優化出現問題時,再切換回解釋執行,保證程序可以正常運行。

即時編譯器極大地提高了Java程序的運行速度,而且跟靜態編譯相比,即時編譯器可以選擇性地編譯熱點代碼,省去了很多編譯時間,也節省很多的空間。目前,即時編譯器已經非常成熟了,在性能層面甚至可以和編譯型語言相比。不過在這個領域,大家依然在不斷探索如何結合不同的編譯方式,使用更加智能的手段來提升程序的運行速度。

原文鏈接:【https://www.infoq.cn/article/2YrpLsC9G0BGlXZ6sUk1】。未經作者許可,禁止轉載。