前言
本文隸屬于專欄《100個問題搞定Java虛擬機》,該專欄為筆者原創(chuàng),引用請注明來源,不足和錯誤之處請在評論區(qū)幫忙指出,謝謝!
本專欄目錄結(jié)構(gòu)和參考文獻請見100個問題搞定Java虛擬機
正文
字段讀取優(yōu)化
即時編譯器會優(yōu)化實例字段以及靜態(tài)字段訪問,以減少總的內(nèi)存訪問數(shù)目。
具體來說,它將沿著控制流,緩存各個字段存儲節(jié)點將要存儲的值,或者字段讀取節(jié)點所得到的值。
當(dāng)即時編譯器遇到對同一字段的讀取節(jié)點時,如果緩存值還沒有失效,那么它會將讀取節(jié)點替換為該緩存值。
當(dāng)即時編譯器遇到對同一字段的存儲節(jié)點時,它會更新所緩存的值。
當(dāng)即時編譯器遇到可能更新字段的節(jié)點時,如方法調(diào)用節(jié)點(在即時編譯器看來,方法調(diào)用會執(zhí)行未知代碼),或者內(nèi)存屏障節(jié)點(其他線程可能異步更新了字段),那么它會采取保守的策略,舍棄所有緩存值。
字段存儲優(yōu)化
即時編譯器能消除冗余的存儲節(jié)點。文章來源:http://www.zghlxwxcb.cn/news/detail-402010.html
如果一個字段先后被存儲了兩次,而且這兩次存儲之間沒有對第一次存儲內(nèi)容的讀取,那么即時編譯器可以將第一個字段存儲給消除掉。文章來源地址http://www.zghlxwxcb.cn/news/detail-402010.html
死代碼消除
- 局部變量的死存儲消除以及部分死存儲消除。
- 不可達分支。通過消除不可達分支,即時編譯器可以精簡數(shù)據(jù)流,并且減少編譯時間以及最終生成機器碼的大小。
到了這里,關(guān)于即時編譯器對于字段讀取及存儲指令的優(yōu)化是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!