第十一章 晚期(運行期)優化html
一、HotSpot虛擬機內的即時編譯前端
解釋器與編譯器:算法
即時編譯器:後端
解釋器與編譯器二者各有優點:數組
HotSpot虛擬機中即時間編譯器:緩存
HotSpot虛擬機的分層編譯策略:架構
編譯對象:性能
觸發條件:優化
方法調用計數器;spa
回邊計數器:
編譯過程:
查看及分析即時編譯結果:
二、編譯優化技術
概述:
公共子表達式消除:
數組邊界檢查消除:
if(foo!=null){ return foo.value; }else{ throw new NullPointException(); }
在使用隱式異常優化以後,虛擬機會把上面僞代碼所表示的訪問過程變爲以下僞代碼。
try{ return foo.value; }catch(segment_fault){ uncommon_trap(); }
虛擬機會註冊一個Segment Fault信號的異常處理器(僞代碼中的uncommon_trap()),這樣當foo不爲空的時候,對value的訪問是不會額外消耗一次對foo判空的開銷的。代價就是當foo真的爲空時,必須轉入到異常處理器中恢復並拋出NullPointException異常,這個過程必須從用戶態轉到內核態中處理,結束後再回到用戶態,速度遠比一次判空檢查慢。當foo極少爲空的時候,隱式異常優化是值得的,但假如foo常常爲空的話,這樣的優化反而會讓程序更慢,還好HotSpot虛擬機足夠「聰明」,它會根據運行期收集到的Profile信息自動選擇最優方案。
方法內聯:
逃逸分析:
轉載請於明顯處標明出處: