如何控制JVM中的JIT行爲?

首先交代一下我本身的測試環境:java

Ubuntu 12.04 x86-64,OpenJDK 7 64-bit Server VM(mixed mode)linux

MacOS  10.11,HotSpot  7 64-bit Server VM(mixed mode)jvm

 

1.如何關閉JIT?測試

通常狀況下,JIT是默認開啓的,因此這裏只存在如何關閉的問題。spa

在啓動JVM的時候,只需增長-Xint或者-Djava.compiler=NONE選項便可:.net

java -Xint your_main_class_file_namecode

java -Djava.compiler your_main_class_file_nameip

若是是從Eclipse啓動,則須要在Run Configurations中指定上述參數。get

 

2.如何查看JIT生成的彙編代碼?it

有的時候,咱們須要查看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

相關文章
相關標籤/搜索