本作者的系统:
操作系统版本及位数可通过uname -a命令查看,如下:
Linux ubuntu 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
JDK的版本可通过java -version来查看,如下:
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
下面来安装HSDIS与JITWatch
1、HSDIS
从如下地址下载hsdis-amd64.so文件并拷贝到路径{JAVA_HOME}/jre/lib/amd64/server下。
http://lafo.ssw.uni-linz.ac.at/hsdis/att/
然后通过如下命令测试是否安装成功。
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version
如果安装成功,则可以通过如下命令生成汇编日志。
java -server -XX:+UnlockDiagnosticVMOptions -XX:+TraceClassLoading -XX:+PrintAssembly -XX:+LogCompilation -XX:LogFile=live.log A # A是java文件类名, live.log 是输出的 log 文件
生成的汇编日志也是JITWatch分析的基础。
或者在Eclipse中为VM arguments传递如下参数后在控制台打印汇编进行查看,如下:(注意,同样需要hsdis-amd64.so文件)
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
如果内容太多,控制台显示不下时,调整缓冲区的大小,调整步骤如下:
在控制台里面右键--首选项--控制台缓冲区大小,设置为1000000
2、安装JITWatch
使用git下载JITWatch,然后可以通过maven来编译,如下:
git clone https://github.com/AdoptOpenJDK/jitwatch
cd jitwatch
mvn clean compile test exec:java
编译成功后会出现UI界面,当下次启动时可直接使用如下命令:
./launchUI.sh
利用JITWatch分析一个复杂一点的例子,这样才会有汇编的内容,如下: