即时编译器
引入多個即時編譯器,是為了在編譯時間和生成代碼的執行效率之間進行取舍。
C1 又叫做 Client 編譯器,面向的是對啟動性能有要求的客戶端 GUI 程序,采用的優化手段相對簡單,因此編 譯時間較短。
C2 又叫做 Server 編譯器,面向的是對峰值性能有要求的服務器端程序,采用的優化手段相對復 雜,因此編譯時間較長,但同時生成代碼的執行效率較高。
從 Java 7 開始,HotSpot 默認采用分層編譯的方式:熱點方法首先會被 C1 編譯,而后熱點方法中 的熱點會進一步被 C2 編譯。 為了不干擾應用的正常運行,HotSpot 的即時編譯是放在額外的編譯線程中進行的。HotSpot 會根 據 CPU 的數量設置編譯線程的數目,并且按 1:2 的比例配置給 C1 及 C2 編譯器。
在計算資源充足的情況下,字節碼的解釋執行和即時編譯可同時進行。編譯完成后的機器碼會在下 次調用該方法時啟用,以替換原本的解釋執行。
總結
- 上一篇: 排序时间复杂度
- 下一篇: 开放寻址法VS链表法