Java 虛擬機總結(jié)給面試的你
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-05-15 14:39:33
本篇主要針對Java虛擬機的晚期編譯優(yōu)化,Java內(nèi)存模型與線程,線程安全與鎖優(yōu)化進行總結(jié),其余部分總結(jié)請點擊Java虛擬總結(jié)上篇 ,Java虛擬機總結(jié)篇。
本篇主要針對Java虛擬機的晚期編譯優(yōu)化,Java內(nèi)存模型與線程,線程安全與鎖優(yōu)化進行總結(jié),其余部分總結(jié)請點擊Java虛擬總結(jié)上篇 ,Java虛擬機總結(jié)篇。
<
div> 一.晚期運行期優(yōu)化
即時編譯器JIT的作用就是熱點代碼轉(zhuǎn)換為平臺相關(guān)的機器碼,并進行優(yōu)化,它并不是一個虛擬機所必須的部分,只能說有它是錦上添花。
熱點代碼
熱點代碼分類
被多次調(diào)用的方法
被多次調(diào)用的循環(huán)體
熱點探測判定方法
·基于采樣的熱點探測,虛擬機周期性地檢查棧頂,發(fā)現(xiàn)某個方法經(jīng)常出現(xiàn)在棧頂,那么這個方法就是熱點方法,簡單高效但不精確
基于計數(shù)器熱點探測,為每個方法建立計數(shù)器來統(tǒng)計執(zhí)行次數(shù),超過閾值就是熱點方法,Hotpot就是采用這種方法。分為方法計數(shù)器(統(tǒng)計方法),回邊計數(shù)器(統(tǒng)計循環(huán))
編譯過程(Client Complier)
第一階段:將字節(jié)碼構(gòu)造成高級中間代碼表示(HIR)
第二階段:將HIR變?yōu)長IR
第三階段:使用線性掃描算法,在LIR上分配寄存器,產(chǎn)生機器代碼
優(yōu)化方法
公共子表達式優(yōu)化
當一個表達式A的結(jié)果已經(jīng)計算過了,且A中的所有變量都沒有發(fā)生過變化,那么下一次要用到A時就不用計算了,而是直接取之前A的結(jié)果。
數(shù)組邊界檢查消除
方法內(nèi)聯(lián)
逃逸分析
逃逸的定義:一個在方法里定義的變量,作為參數(shù)傳遞給其他方法(方法逃逸),或者賦值給類變量(線程逃逸)。
優(yōu)化方法:
棧上分配:不會逃逸的對象就不在堆上分配了,就在棧上分配,那么對象所占的
空間就可以隨棧幀的出棧而銷毀,減少垃圾收集系統(tǒng)的壓力。
同步消除:如果一個變量肯定不會逃逸出線程,那么關(guān)于這個變量的同步措施就可以去掉。