欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 18:37:37
...

环境

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安装成功:

mac下使用JITWatch查看JDK1.8汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
 

二、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汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
 

 

JITWatch使用

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

mac下使用JITWatch查看JDK1.8汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
 

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

mac下使用JITWatch查看JDK1.8汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
说明:

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

 

 

附录

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

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

 

 

 

 

 

  • mac下使用JITWatch查看JDK1.8汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
  • 大小: 41.6 KB
  • mac下使用JITWatch查看JDK1.8汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
  • 大小: 178.9 KB
  • mac下使用JITWatch查看JDK1.8汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
  • 大小: 145.7 KB
  • mac下使用JITWatch查看JDK1.8汇编代码
            
    
    博客分类: java相关hsdisjitwatchJVM javavolatilehsdisjitwatch汇编 
  • 大小: 514.4 KB