三、java编译器
java編譯器分為2種
- 解析器 (bytecode intepreter)
- JIT (just in time compiler)
解釋執(zhí)行:解釋執(zhí)行是采用匹配執(zhí)行解釋器(解釋器是個黑盒,通常也有編譯器的組成部分)內(nèi)部已經(jīng)編譯好的機器碼,不是生成新的機器碼(也有說法是逐條翻譯成機器碼?)。 - 由于逐條翻譯,程序啟動快,但是執(zhí)行效率不高。
編譯執(zhí)行:運行期間,通過將字節(jié)碼編譯成對應的新的機器碼(會將其緩存起來,通過參數(shù)-XX:ReservedCodeCacheSize),然后執(zhí)行。 - 需要先編譯出新的機器指令,所以程序啟動較慢,但是執(zhí)行效率高(因為執(zhí)行的是機器指令)。?
混合模式
? ? ? ?現(xiàn)在主流的商用虛擬機(HotSpot(Oracle)、J9 VM(IBM))中幾乎都同時包含``解釋器和編譯器。
? ? ? ? 二者在其中各有優(yōu)勢:當程序需要迅速啟動和執(zhí)行時,解釋器可以首先發(fā)揮作用,省去編譯的時間,立即執(zhí)行;當程序運行后,隨著時間的推移,編譯器逐漸會返回作用,把越來越多的代碼編譯成本地代碼后,可以獲取更高的執(zhí)行效率。解釋執(zhí)行可以節(jié)約內(nèi)存,而編譯執(zhí)行可以提升效率。
? ? ? ?在 Java7 之前,需要根據(jù)程序的特性來選擇對應的 JIT,虛擬機默認采用解釋器和其中一個編譯器配合工作。
? ? ? ? ?HotSpot 虛擬機會根據(jù)自身版本與計算機的硬件性能自動選擇運行模式,用戶也可以使用 -client 和 -server 參數(shù)強制指定虛擬機運行在 Client 模式或者 Server 模式。這種配合使用的方式稱為**“混合模式”(Mixed Mode)**,用戶可以使用參數(shù) -Xint 強制虛擬機運行于 “解釋模式”(Interpreted Mode),這時候編譯器完全不介入工作。另外,使用 -Xcomp 強制虛擬機運行于 “編譯模式”(Compiled Mode),這時候?qū)?yōu)先采用編譯方式執(zhí)行,但是解釋器仍然要在編譯無法進行的情況下接入執(zhí)行過程。通過虛擬機 -version 命令可以查看當前默認的運行模式。
總結(jié)
- 上一篇: 编译环境 Golang开发环境 vs
- 下一篇: 内蒙古一个不起眼的小城,藏着中国最大火力