1. 程式人生 > >JVM,HotSpot和JIT關係梳理

JVM,HotSpot和JIT關係梳理

像JAVA以及.net這種跨平臺語言,之所以能夠遮蔽平臺特性,是因為它們的原始碼被編譯成.class檔案後,由虛擬機器解釋執行,當然擴充套件一下,JAVA在jdk8以後是編譯與解釋混合執行模式,當然最重要的還是虛擬機器的解釋執行。

提到虛擬機器不能只想到JVM,JVM只是JAVA虛擬機器,JVM只解釋JAVA原始碼編譯後的.class檔案。而虛擬機器還有其他種類,比如.net的虛擬機器是CLR。所以JVM全程是JAVA虛擬機器,要嚴謹。

JVM是sun公司旗下產品,有三個版本,分別是javaSE(平臺標準版),javaEE(平臺企業版)和javaME(平臺移動裝置版)。sun公司在jdk8之後的JVM技術實現是HotSpot,這裡還有一層關係,JDK是java開發環境,JRE是java執行環境,JDK包含JRE,而JRE包含JVM。也就是說HotSpot是JVM的實現技術,是用C+組合語言編寫的,主要功能包括一個直譯器和兩個編譯器,這也是為什麼jdk8之後的JAVA是編譯與解釋混合執行模式的原因。兩個編譯器可以成為JIT編譯器,即動態編譯器,是兩種模式,server模式和client模式。

client模式是一種輕量級編譯器,也叫C1編譯器,佔用記憶體小,啟動快,但是執行效率沒有server模式高,預設狀態下不進行動態編譯,適用於桌面應用程式。

server模式是一種重量級編譯器,也叫C2編譯器,啟動慢,佔用記憶體大,執行效率高,預設是開啟動態編譯的,適合伺服器應用。

-XX:RewriteFrequentPairs   用於開啟動態編譯。

-Xint:禁用JIT編譯,即禁用兩個編譯器,純解釋執行。

-Xcomp:純編譯執行,如果方法無法編譯,則回退到解釋執行模式解釋無法編譯的程式碼。