java反汇编_Java反汇编:HSDIS、JITWatch

353d4ac162a40511175a568dc2cfdd15.png

大多数情况下,通过诸如javap等反编译工具来查看源码的字节码已经能够满足我们的日常需求,但是不排除在有些特定场景下,我们需要通过反汇编来查看相应的汇编指令。本文我们就来介绍两个很好用的工具——HSDIS、JITWatch

HSDIS

HSDIS(HotSpot disassembler),一个Sun官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件,其实际上就是一个动态库。这里我们直接从网上下载与我们系统对应的编译后文件,然后直接将其放置到JDK的bin目录下即可

1df9a70c1f99a681dd1642d82028795e.png

然后在IDE中配置相关VM Option虚拟机参数

a077df00e8530be55939c02dc32da0c8.png

这里对用到的相关VM Option作解释说明

-Xcomp : 让JVM以编译模式执行代码,即JVM会在第一次运行时即将所有字节码编译为本地代码-XX:+UnlockDiagnosticVMOptions : 解锁诊断功能-XX:+PrintAssembly : 输出反汇编后的汇编指令

当我们在IDE运行代码后,即可看到直接输出的汇编代码了

2b67fa4d3106553cb1727ac3c877b49d.png

JITWatch

虽然通过HSDIS我们已经可以通过输出打印来查看汇编,但是这样显然不够方便。特别是在大项目中,终端输出会非常多。幸运的是 JITWatch ——JIT编译日志分析工具解决了这个痛点

编译

我们首先需要将JITWatch clone到本地

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

然后通过Maven进行编译

=

编译成功后,就可通过其中的脚本启动

sh launchUI.sh

JITWatch的可视化分析

为了能让JITWatch可视化的分析编译日志,我们还需要继续添加相关VM Option虚拟机参数来让反汇编后的汇编指令写到指定日志文件中

-Xcomp
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintAssembly
-XX:+LogCompilation
-XX:LogFile=jit.log

8fd113b7971b6d387b039d093191ae33.png

这样IDE运行后,汇编代码不仅打印输出到终端,还会生成我们下面所需的日志文件

ddae3d950587835393a252d819ad189a.png

现在,我们就可以通过JITWatch来进行可视化分析了

首先点击 Config 按钮来设置Java源码文件、Class字节码文件所在路径

65a0c59e87deb6ceed1ac7ff2a253577.png

然后点击 Open Log 来导入我们刚刚生成的日志文件,然后点击 Start 即可。现在我们可以从左侧选择我们需要分析的类,然后在右侧列出的方法上右击并选择 Show TriView 即可进行分析

2c777e5b30b121c97bab786a53a87c08.png

从下面可以看到,JITWatch可以同时显示源码、字节码、汇编,大大方便了我们的分析工作

877e58c8a942d8978c91b0f1777389ef.png

参考文献

  1. 深入理解Java虚拟机·第2版 周志明著
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值