運行期優化

    當虛擬機發現某個方法或代碼塊的運行特別頻繁,就會把這些代碼認定爲「熱點代碼」,爲了提升熱點代碼的執行效率,在運行時,虛擬機將會把這些代碼編譯成爲與本地平臺相關的機器碼,並進行各類層次的優化,完成這個任務的編譯器稱爲即時編譯器(Just In Time Compiler, 簡稱JIT編譯器);優化

    要知道一段代碼是否是熱點代碼,是否是要觸發即時編譯,這個行爲成爲熱點探測;目前流行的兩種探測方式:
線程

1、基於採樣的熱點探測:採用這種方法的虛擬機會週期性地檢查各個線程的棧頂,若是發現某個(某些)方法常常出如今棧頂,那這個方法就是「熱點方法」。這種方式好處是實現簡單高效,還能夠很容易地獲取方法調用關係(將調用堆棧展開便可),缺點是很難精確地確認一個方法的熱度,容易由於受到線程阻塞或別的外界因素的影響而要亂熱點探測;編譯器

2、基於計數器的熱點探測:採用這種方法的虛擬機會爲每一個方法(甚至是代碼塊)創建計數器,統計方法的執行次數,若是執行次數超過必定的閥值就認爲它是「熱點方法」。這種方式實現起來比較麻煩,須要爲每一個方法創建並維護計數器,並且不能直接獲取到方法的調用關係,可是它的統計結果相對來講更加精確;虛擬機

相關文章
相關標籤/搜索