本文目前只介绍到windows,如果以后有需要会放上其他操作系统的库文件。

Windows

  1. 戳这里下载hsdis.dll ,提取码: 85of
  2. hsdis.dll 放入 jdk/bin/server 目录下,如图所示:

image.png

  1. 在执行java程序时加上以下参数:
    1. -server ,表示运行在服务器模式下
    2. -Xcomp ,表示永远以编译模式运行
    3. -XX:-Inline ,表示禁止内联优化
    4. -XX:+UnlockDiagnosticVMOptions ,表示解锁诊断参数
    5. -XX:CompileCommand=<ARG>,*<CLASS_NAME>.<METHOD_NAME> ,仅针对指定的某一段输出汇编
      1. <ARG> ,有 printoption
      2. <CLASS_NAME> ,即要分析的类名
      3. <METHOD_NAME> ,该类中的某个方法
    6. -XX:+PrintAssembly <CLASS_NAME> ,输出该程序的全部汇编
      1. <CLASS_NAME> ,要分析的类名

比如我现在有这样一段程序:

  1. public class VolatileApp {
  2. static volatile boolean flag = false;
  3. public static void main(String[] args) {
  4. test();
  5. }
  6. public static void test(){
  7. flag = false;
  8. }
  9. }

我要输出 test() 方法的汇编的话,需要这样子写:

java -server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:-Inline -XX:CompileCommand=print,*VolatileApp.test

最后输出如下所示的文本内容:
image.png