JITWatch

TIPS
[重要程度]:了解即可
JITWatch使用较为复杂,需对编译原理、汇编、机器码有所了解才能玩得比较好。而这些内容,限于本套课程篇幅,无法展开。
因此,同学们如果一时间掌握不了,也无需担心。本文主要还是为了给大家构建相对完整的工具链知识体系(毕竟JITWatch是在其领域中非常典型的工具)。实际项目中这个领域的调优做得还是比较少的,可以先留个印象,以后汇编、机器码、编译源码等知识积累足够了自然就会比较轻松了。
JITWatch是JIT编译器的日志分析器与可视化工具。可用来检查内联决策、热点方法、字节码以及汇编的各种细节。它经常和HSDIS配合使用。

安装说明

HSDIS存放目录

  • JDK 11:$JAVA_HOME/lib/server/
  • JDK 8:存放到 $JAVA_HOME/jre/lib/server/

也可参考:《 各系统下安装HSDIS 》中的说明编译,里面有各种操作系统如何编译的说明。

下载已编译完成的HSDIS文件

TIPS
不同操作系统、不同JDK版本下的HSDIS文件不能通用,因此,务必搜索和你操作系统、JDK版本都一致的HSDIS文件!!!

  • 可在CSDN上搜索各版本的HSDIS文件,不过笔者没有亲测
  • GitHub 上有Windows环境下的编译说明,并提供了hsdis的编译后文件
  • 适用于macOS JDK 11下的HSDIS文件:
    1. 链接:https://pan.baidu.com/s/1HXjzNDpzin6fXGrZPyQeWQ 密码:aon2
    2. # 详见tools/hsdis目录

    macOS JDK 11下编辑-源码安装HSDIS全过程

    ```shell
  1. 下载并解压hsdis wget https://hg.openjdk.java.net/jdk/jdk/archive/jdk-11+7.tar.bz2/src/utils/hsdis

  2. 将目录切换到hsdis目录 cd src/utils/hsdis

  3. 在此目录中下载binutils,官方网站:http://sourceware.org/binutils/ wget http://ftp.heanet.ie/mirrors/ftp.gnu.org/gnu/binutils/binutils-2.28.tar.gz

  4. 解压binutils tar -xzf binutils-2.28.tar.gz

  5. 编译HSDIS make BINUTILS=binutils-2.28 ARCH=amd64

  6. 将hsdis-amd64.dylib拷贝到$JAVA_HOME/lib/server下 sudo cp build/macosx-amd64/hsdis-amd64.dylib $JAVA_HOME/lib/server/

  1. <a name="WaiSI"></a>
  2. ## 启动应用
  3. ```shell
  4. java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp -XX:+LogCompilation -XX:LogFile=/Users/itmuch.com/logfile.log -XX:+TraceClassLoading -jar xxx.jar

其中:

  • UnlockDiagnosticVMOptions:开启诊断信息
  • PrintAssembly:输出反汇编内容
  • Xcomp:以编译模式启动,这样,无执行足够次数来预热即可触发即时编译
  • LogCompilation:打印编译相关信息
  • LogFile:指定日志文件
  • TraceClassLoading:是否跟踪类的加载

执行完后,将会生成一个 /Users/itmuch.com/logfile.log 文件。里面包括了各种类编辑以及汇编信息

使用JITWatch可视化阅读日志

  1. 1. 下载JITWatch源码,并切换到JITWatch的源码根目录(如果不会用Git,也可点击https://github.com/AdoptOpenJDK/jitwatch/archive/master.zip下载源码)
  2. git clone https://github.com/AdoptOpenJDK/jitwatch.git
  3. cd jitwatch
  4. 2. 启动JITWatch
  5. mvn clean compile exec:java
  6. 3. 点击Open Log,并选择上面的日志文件
  7. 4. 点击Config,并配置源码目录及JDK src
  8. 5. 点击Start

即可可视化地分析了。