mac下使用JITWatch查看JDK1.8汇编代码

环境

1.机器型号:MacBook Pro (Retina, 15-inch, Mid 2015)

2.CPU型号:2.5 GHz Intel Core i7

3.操作系统:macOS 10.12.5 (16F73)

4.内核版本:Darwin 16.6.0

5.JDK版本:java version "1.8.0_101"(重要,jdk版本不同hsdis库可能要重新编译)

 

 

相关源码

1.jdk8地址:http://hg.openjdk.java.net/jdk8/jdk8

2.JITWatch源码:https://github.com/AdoptOpenJDK/jitwatch

 

 

预备知识

1.hsdis:查看JIT编译汇编代码,目录位置:jdk8/hotspot/src/share/tools/hsdis

2.JVM相关参数:

   -server 表示jvm以C2编译器编译

   -Xcomp 以编译模式运行,默认为mix

   -XX:+TraceClassLoading 打印类加载日志

   -XX:+PrintAssembly 打印汇编代码,需要hsdis支持

-XX:LogFile=path/jit.log 将jvm输出日志输入到jit.log中

3.JITWatch 开源分析jvm汇编命令工具

 

 

安装

一、hsdis编译安装

1.cd hotspot/src/share/tools/hsdis #jdk8源码中

2.下载binutils源码:(编译hsdis需要,jdk8需要2.26版本/jdk7则为2.24版本)

   wget http://ftp.heanet.ie/mirrors/gnu/binutils/binutils-2.26.tar.gz

   tar -xvf ./binutils-2.26.tar.gz   

3.此步骤操作均在hsdis目录下:

   export CPP=/usr/bin/cpp #这里需要先设置环境变量CPP,否则make时会报错

   make BINUTILS=binutils-2.26 ARCH=amd64  #编译hsdis

   

   mac下可能会有一下报错:

   fatal error: sys/types.h: No such file or directory

   解决:

   xcode-select --install #按弹出框提示安装,注意,这里需要先安装xcode

 

安装完成后再次执行make BINUTILS=binutils-2.26 ARCH=amd64

4.hsdis编译完成:

   对应lib目录为./build/macosx-amd64/hsdis-amd64.dylib

   设置环境变量:

   sudo vi /etc/profile

   LD_LIBRARY_PATH="/Volumes/home/Users/preideas/work/jit"

5.检验hsdis库是否生效:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version > 1.txt

说明:

这里因为以上命令输出过多,所以重定向至1.txt

若看到以下输出,则说明hsdis安装成功:


 

二、JITWatch安装:

1.下载源码:

git clone https://github.com/AdoptOpenJDK/jitwatch.git

2.编译:

   cd jitwatch

   ant clean compile test run #已安装maven环境的,也可以执行mvn clean compile test exec:java

3.启动:(仍在jitwatch目录下)

   sh launchUI.sh

 

 

Eclipse参数配置

1.在要运行的java类上:右键-->run as -->run configurations-->Arguments,填入以下参数;

-server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+LogCompilation -XX:+TraceClassLoading -XX:LogFile=/Volumes/home/Users/work/jit/jit.log

说明:

-XX:LogFile参数中path根据自己机器设置

mac下使用JITWatch查看JDK1.8汇编代码_第1张图片
 

 

JITWatch使用

1.将eclipse中生成的jit.log导入jitwatch,效果如下:

mac下使用JITWatch查看JDK1.8汇编代码_第2张图片
 

2.点击1图中TriView效果如下:

mac下使用JITWatch查看JDK1.8汇编代码_第3张图片
说明:

从上图可看出volatile关键,使用了cpu的lock指令

 

 

附录

1.mac已编译hsdis-amd64库(见附件)

2.mac已编译hsdis-i386库(见附件)

 

 

 

 

 

你可能感兴趣的:(java相关,hsdis,jitwatch,JVM)