java HotSpot

1. HotSpot歷史

SUN的JDK版本從1.3.1開始運用HotSpot虛擬機, 2006年底開源,主要使用C++實現,JNI接口部分用C實現。
HotSpot是較新的Java虛擬機,用來代替JIT(Just in Time),可以大大提高Java運行的性能。
Java原先是把源代碼編譯爲字節碼在虛擬機執行,這樣執行速度較慢。而HotSpot將常用的部分代碼編譯爲本地(原生,native)代碼,這樣顯着提高了性能。
HotSpot JVM 參數可以分爲規則參數(standard options)和非規則參數(non-standard options)。
規則參數相對穩定,在JDK未來的版本里不會有太大的改動。

非規則參數則有因升級JDK而改動的可能。

 

 

2.HotSpot基礎知識

HotSpot包括一個解釋器和兩個編譯器(client 和 server,二選一的),解釋與編譯混合執行模式,默認啓動解釋執行。

編譯器:java源代碼被編譯器編譯成class文件(字節碼),java字節碼在運行時可以被動態編譯(JIT)成本地代碼(前提是解釋與編譯混合執行模式且虛擬機不是剛啓動時)。

解釋器: 解釋器用來解釋class文件(字節碼),java是解釋語言(書上這麼說的)。

server啓動慢,佔用內存多,執行效率高,適用於服務器端應用;

client啓動快,佔用內存小,執行效率沒有server快,默認情況下不進行動態編譯,適用於桌面應用程序。

由-XX:+RewriteFrequentPairs參數控制 client模式默認關閉,server模式默認開啓

在jre安裝目錄下的lib/i386/jvm.cfg 文件下。

 

 

 

3.動態編譯

動態編譯(compile during run-time),英文稱Dynamic compilation;Just In Time也是這個意思。

HotSpot對bytecode的編譯不是在程序運行前編譯的,而是在程序運行過程中編譯的。
HotSpot裏運行着一個監視器(Profile Monitor),用來監視程序的運行狀況。

java字節碼(class文件)是以解釋的方式被加載到虛擬機中(默認啓動時解釋執行)。 程序運行過程中,那一部分運用頻率大,那些對程序的性能影響重要。對程序運行效率影響大的代碼,稱爲熱點(hotspot),HotSpot會把這些熱點動態地編譯成機器碼(native code),同時對機器碼進行優化,從而提高運行效率。對那些較少運行的代碼,HotSpot就不會把他們編譯。

HotSpot對字節碼有三層處理:不編譯(字節碼加載到虛擬機中時的狀態。也就是當虛擬機執行的時候再編譯),編譯(把字節碼編譯成本地代碼。虛擬機執行的時候已經編譯好了,不要再編譯了),編譯並優化(不但把字節碼編譯成本地代碼,而且還進行了優化)。

至於那些程序那些不編譯,那些編譯,那些優化,則是由監視器(Profile Monitor)決定。

 

最後歡迎大家訪問我的個人網站:1024s

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章