程序編譯和代碼優(yōu)化

早期(編譯期)優(yōu)化

java泛型

在java中,泛型方法在編譯之后,生成的class文件里面保存的是原生類(lèi)型。

晚期(運(yùn)行期)優(yōu)化

java程序最初是通過(guò)解釋器進(jìn)行解釋執(zhí)行的,當(dāng)某個(gè)方法或者代碼塊的運(yùn)行特別頻繁時(shí),就會(huì)將這些代碼認(rèn)定為熱點(diǎn)代碼。為了提高這些熱點(diǎn)代碼的執(zhí)行效率,在運(yùn)行時(shí)侯會(huì)將這些代碼編譯為和平臺(tái)無(wú)關(guān)的機(jī)器碼,并進(jìn)行各種層次的優(yōu)化,完成這個(gè)任務(wù)的編輯器被稱(chēng)為即時(shí)編譯器

11.2HotSpot虛擬機(jī)內(nèi)的即時(shí)編輯器

解釋器與編譯器

解釋器:迅速啟動(dòng)和執(zhí)行
編譯器:將代碼轉(zhuǎn)化為本地代碼,獲取更高的執(zhí)行效率
HotSpot虛擬機(jī)里面內(nèi)置兩個(gè)即時(shí)編譯器,分別稱(chēng)為Client Compiler和Server Compiler

11.2.2編譯對(duì)象和觸發(fā)條件,在上文當(dāng)中已經(jīng)提到會(huì)被即時(shí)編譯器編譯的“熱點(diǎn)代碼主要分為兩類(lèi)”1,被多次調(diào)用的方法。2.被多次執(zhí)行的循環(huán)體

判斷一段代碼是不是熱點(diǎn)代碼,是不是需要觸發(fā)即時(shí)編譯,這樣的行為稱(chēng)為熱點(diǎn)探測(cè),主要由兩種:
1,基于采樣的熱點(diǎn)探測(cè):周期性的檢查虛擬機(jī)的棧頂,若一個(gè)或者某些方法經(jīng)常出現(xiàn)在棧頂
2,基于計(jì)數(shù)器的熱點(diǎn)探測(cè):建立計(jì)數(shù)器,設(shè)置閥值。
而Hotpost主要采用的時(shí)第二種--因此它為每個(gè)方法準(zhǔn)備了兩種計(jì)數(shù)器:方法調(diào)用計(jì)數(shù)器(client是1500次,server模式下是10000次)和回邊計(jì)數(shù)器(他的作用是統(tǒng)計(jì)一個(gè)方法當(dāng)中循環(huán)體代碼執(zhí)行的次數(shù))

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

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

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