# JAVA反汇编 **Repository Path**: girl571/javaJIT ## Basic Information - **Project Name**: JAVA反汇编 - **Description**: JAVA 反汇编 HSDIS, JITwatch - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-07 - **Last Updated**: 2023-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java反汇编 ## 一、环境准备 > 1. Windows 10 ,**`64位`** > 2. IDEA 2021.3.3 > 3. **JDK `17`** > java version "17.0.4.1" 2022-08-18 LTS Java(TM) SE Runtime Environment (build 17.0.4.1+1-LTS-2) Java HotSpot(TM) **`64-Bit Server`** VM (build 17.0.4.1+1-LTS-2, mixed mode, sharing) ## 二、HSDIS >准备HSDIS插件 >**Windows 10 ,`64位`** 对应插件: [hsdis-amd64.dll](https://gitee.com/girl571/javaJIT/blob/master/hsdis-amd64.dll) 其他系统对应插件,请自行查找 >准备好插件,将插件放入对应目录文件夹下 >**JDK `17`** 对应目录 ``` C:\Program Files\Java\jdk-17.0.4.1\bin\server ``` > 具体的JDK安装目录,*以`自己的安装目录`为准*,主要是要放在 `jdk 17`下的**bin\server**目录下 > 即 `.\Java\jdk-17.0.4.1\bin\server` > 其他版本的 jdk 方式目录请自行查询 ### 反汇编 - 完成以上准备工作,即可进行 JAVA 反汇编。 - 以下反汇编演示,都是在 **IDEA 2021.3.3** 环境下进行。不同的IDE,请以自己熟练使用的IDE为准。 #### 准备测试代码 > - 以经典的 **双重检查单例** 代码为例,为后续的 ***volatile*** 关键字探索提前准备反汇编文件。 ```java public class SingletonWithVolatile { private volatile static SingletonWithVolatile instance; public static SingletonWithVolatile getInstance() { if (instance == null) { synchronized (SingletonWithVolatile.class) { if (instance == null) { instance = new SingletonWithVolatile(); } } } return instance; } public static void main(String[] args) { SingletonWithVolatile.getInstance(); } } ``` #### 设置 VM options > `添加 VM options`输入框 ![添加VM options](https://img-blog.csdnimg.cn/d570a35e5a6c4ffb8c77c3eac8b5de89.png#pic_center) > 输入配置命令 > - -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+LogCompilation -XX:LogFile=jit.log -Xcomp : 让JVM以编译模式执行代码,JVM在首次运行时,就会将所有字节码编译为本地代码 -XX:+UnlockDiagnosticVMOptions : 解锁诊断功能 -XX:+PrintAssembly : 输出反汇编后的汇编指令 -XX:+LogCompilation:输出反汇编日志 -XX:LogFile=jit.log:反汇编日志保存路径及名称 > - 完成以上操作,点击RUN按钮,就会开始反汇编。 > - 同时控制台会输出相应内容,对应路径下也会生成反汇编日志文件。 > - 该日志文件用于后续的 **JITwatch** 可视化软件。 > - 反汇编完成,控制台输出截图如下 ![反汇编完成截图](https://img-blog.csdnimg.cn/ebc5d859f8894b62a131b212f8afe8f3.png#pic_center) ## 三、JITwatch 准备 软件:[JITwatch](https://github.com/AdoptOpenJDK/jitwatch) 此处使用的版本:jitwatch-ui-**1.4.7**-shaded-win.jar ### 初体验 > 完成以上准备操作,运行 > JITwatch 预置了一个文件,点击 `沙盒sandbox`,可自行探索体验 ![JITwatch初体验](https://img-blog.csdnimg.cn/81625cc56423487e8d6abbedef51b6f9.png#pic_center) ### 执行本地文件 > 关闭初体验窗口,`清空`初体验文件 > ![清空初体验](https://img-blog.csdnimg.cn/b92447bbdc6841a7884f17e52a731923.png#pic_center) > `创建`新的配置 > ![创建新的配置](https://img-blog.csdnimg.cn/fbd02f72b28644ea956ab0c822b10f92.png#pic_center) > `设置`环境 > ![设置环境](https://img-blog.csdnimg.cn/490d4e6a0e144b57927748c993003857.png#pic_center) > 选择`log文件` > ![选择log文件](https://img-blog.csdnimg.cn/99e8a2b052264ace94103ba182011523.png#pic_center) > `RUN` > ![开始探索吧](https://img-blog.csdnimg.cn/4fb4255d1c434c67b2dc1b8724077958.png#pic_center) ![探索体验](https://img-blog.csdnimg.cn/f5d7c61c31c64abda1e508a3ba69c147.png#pic_center) ## 结束 至此,已经成功完成了`反汇编`,成功完成`图形化界面`的初体验。 利刃出鞘,方可探索JVM奥秘。 ***加油,少年!***