如何控制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

相关文章
相关标签/搜索