×

Java 虛擬機(jī)總結(jié)給面試的你

  • 作者:新網(wǎng)
  • 來源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-15 14:39:33

本篇主要針對Java虛擬機(jī)的晚期編譯優(yōu)化,Java內(nèi)存模型與線程,線程安全與鎖優(yōu)化進(jìn)行總結(jié),其余部分總結(jié)請點(diǎn)擊Java虛擬總結(jié)上篇 ,Java虛擬機(jī)總結(jié)篇。

   本篇主要針對Java虛擬機(jī)的晚期編譯優(yōu)化,Java內(nèi)存模型與線程,線程安全與鎖優(yōu)化進(jìn)行總結(jié),其余部分總結(jié)請點(diǎn)擊Java虛擬總結(jié)上篇 ,Java虛擬機(jī)總結(jié)篇。

20130808152352_5840.jpg

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

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading