首先交代一下我自己的測試環境:
Ubuntu 12.04 x86-64,OpenJDK 7 64-bit Server VM(mixed mode)
MacOS 10.11,HotSpot 7 64-bit Server VM(mixed mode)
1.如何關閉JIT?
一般情況下,JIT是默認開啟的,所以這裡只存在如何關閉的問題。
在啟動JVM的時候,只需增加-Xint或者-Djava.compiler=NONE選項即可:
java -Xint your_main_class_file_name
java -Djava.compiler your_main_class_file_name
如果是從Eclipse啟動,則需要在Run Configurations中指定上述參數。
2.如何查看JIT生成的匯編代碼?
有的時候,我們需要查看JIT生成的匯編代碼,來觀察JIT如何影響代碼的執行。
完成這項任務,需要安裝一個支持庫,hsdis,步驟如下。
Linux系統:
下載linux-hsdis-amd64.so或者linux-hsdis-i386.so
重命名為hsdis-amd64.so或者hsdis-i386.so
拷貝至$JAVA_HOME/jre/lib/amd64/目錄
我的機器上是/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/
OS X系統:
下載gnu-bsd-libhsdis-amd64.dylib或者gnu-bsd-libhsdis-i386.dylib
重命名為hsdis-amd64.dylib或者hsdis-i386.dylib
拷貝至$JAVA_HOME/jre/lib/目錄
我的機器上是/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/hsdis-amd64.dylib
安裝完支持庫之後,在啟動JVM的時候,只需增加以下兩個選項即可:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly your_main_class_file_name
下面這個鏈接對此有詳細說明,可以參考:
https://wiki.openjdk.java.net/display/HotSpot/PrintAssembly
另外,如果不安裝支持庫的話,指定上述選項並啟動JVM時會有如下錯誤:
Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly is disabled