java虛擬機的逃逸分析

逃逸分析做爲其餘優化手段提供依據的分析技術,其基本行爲就是分析對象動態做用域:當一個對象在方法中被定義後,它可能被外部方法所引用,例如做爲調用參數傳遞到其餘方法中,稱爲方法逃逸。甚至還有可能被外部線程訪問到,好比賦值給類變量或能夠在其餘線程中訪問的實例變量,稱爲線程逃逸。
若是能證實一個對象不會逃逸到方法或線程以外,也就是別的方法或者線程沒法經過任何途徑訪問到這個對象,則可能爲這個變量進行一些高校的優化。
1)棧上分配,若是肯定一個對象不會逃逸出方法以外,那麼把這個對象在棧上分配內存,對象所佔用的內存空間就能夠隨棧幀出棧而銷燬。在通常應用中,不會逃逸的局部對象所佔的比例很大,若是可以使用棧上分配,那麼對象就會隨着方法的結束而自動銷燬,垃圾收集系統的壓力將會小不少。
2)同步消除,線程同步自己就是一個相對耗時的過程,若是逃逸分析可以肯定一個變量不會逃逸出線程,沒法被其餘線程訪問,那這個變量的讀寫確定就不會有競爭,對這個變量實施的同步操做也就能夠消除掉。
3)標量替換:若是逃逸分析證實一個對象不會被外部訪問。而且這個對象能夠被拆散的話,那程序真正執行的時候可能不建立這個對象,而改成直接建立它的若干個被這個方法使用到的成員變量來替換。優化

相關文章
相關標籤/搜索