资料 2:查看 Java 代码对应的汇编代码
Java 编译的过程会将代码先编译成字节码,然后再编译成机器码,中间并不会涉及汇编代码
查看 Java 代码对应的汇编代码,是件挺麻烦的事情,需要使用额外的反汇编工具 hsdis,将机器码再反汇编为汇编代码
hsdis 安装的过程如下所示
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u
cd jdk8u/hotspot/src/share/tools/hsdis/
wget http://ftp.heanet.ie/mirrors/ftp.gnu.org/gnu/binutils/binutils-2.30.tar.gz
tar -xzf binutils-2.30.tar.gz
make BINUTILS=binutils-2.30 ARCH=amd64
# java 8
sudo cp build/macosx-amd64/hsdis-amd64.dylib
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk
/Contents/Home/jre/lib/server/
# java 9 onwards
sudo cp build/macosx-amd64/hsdis-amd64.dylib
/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/server/
安装完成之后,我们在使用以下命令来输出汇编代码
Java -XX:+PrintAssembly -Xcomp
-XX:CompileCommand=compileonly,Hello.test com.wz.Hello
-Xcomp 让虚拟机以编译模式执行代码
-XX:CompileCommand=compileonly,Hello.test 只编译 test()
-XX:+PrintAssembly 输出反汇编内容
为了方便查看 Java 代码与汇编代码的对应关系,我们可以进一步安装 JITWatch 软件,如下所示
1.下载源码:
git clone https://github.com/AdoptOpenJDK/jitwatch.git
2.编译
cd jitwatch
mvn clean compile test exec:java
3.启动(仍在 jitwatch 目录下)
sh launchUI.sh
本文来自博客园,作者:lidongdongdong~,转载请注明原文链接:https://www.cnblogs.com/lidong422339/p/17392001.html