准备工作
工具下载:
我们需要自行下载jdk源码,并编译hotspot/src/shared/tools/hsdis
,生成hsdis-amd64.dylib(OSX平台)
操作步骤
步骤如下
- 下载OpenJdk源码,这里我下载的是OpenJdk8
- 进入openjdk地址:http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/tags
- 选择对应的版本,然后在左侧选择压缩类型即可下载
- How to download OpenJDK 8 source code from java.net
- 下载
binutils-2.28.tar.gz
,地址:https://ftp.gnu.org/gnu/binutils/ 这里选这个版本是因为我这里的jdk源码版本有个bug,在binutils-2.29+版本无法编译成功 - 下载完成之后,进入源代码路径
hotspot/src/shared/tools/hsdis
- 复制刚刚下好的binutils-2.28.tar.gz到当前目录,解压
tar -zxf binutils-2.28.tar.gz
- 执行编译命令
make BINUTILS=binutils-2.28 ARCH=amd64
,如果是其他平台,可以自行查找编译命令 - 编译完成后执行
sudo cp build/macosx-amd64/hsdis-amd64.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home/jre/lib/server
将编译出来的文件复制到$JAVA_HOME/jre/lib/server
目录 - 然后在执行java文件的时候添加上启动参数
-Xcomp
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintAssembly
- 也可以指定只查看某个方法的汇编代码,通过添加参数如
-XX:CompileCommand=compileonly,*Singleton.getInstance
- 指定反汇编某个类
-XX:CompileOnly=com/xx/concurrency/DoubleCheckSingleton
- Oracle - Java启动参数