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