使用JVM的HSDIS插件对java代码进行反汇编

假设要对下面代码进行反汇编:

package org.example.volatiletest;

public class VolatileTest {

    public  static volatile  boolean stop = false;
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            int i = 0;
            while (!stop){
                i++;
            }
        });
        t.start();
        System.out.println("start thread.");
        Thread.sleep(1000);
        stop = true;
    }
}

需要将编译好的 插件hsdis-amd64.lib hsdis-amd64.dll放到 C:\Program Files\Java\jdk1.8.0_181\jre\bin\server 路径下(实际路径根据自己安装路径修改)
使用JVM的HSDIS插件对java代码进行反汇编_第1张图片
然后在idea中配置jvm参数: VolatileTest 是要反汇编的类的名字(如果要反汇编具体的某个方法,类名后面加上.方法名) 并且需要指定安装了插件的jre的路径,如下图所示:

-server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly  -XX:CompileCommand=compileonly,*VolatileTest.* 

使用JVM的HSDIS插件对java代码进行反汇编_第2张图片

注意是Java\jdk1.8.0_181\jre\bin\server 路径,而不是 C:\Program Files\Java\jre1.8.0_181\bin\server, 我就是因为路径配置错了,一直报下面这样的错误提示:
在这里插入图片描述

接下来,运行代码,就可以得到代码对应的汇编语言的代码了,这里只挑出来最关键的一部分,加了volatile关键字后,汇编代码中会在stop变量上加上一个lock指令:
使用JVM的HSDIS插件对java代码进行反汇编_第3张图片

你可能感兴趣的:(Java并发编程)