Java的编译
1.编写代码
生成 【.java】 文件
public class VolatileCode {
private static volatile int i;
public static void incr() {
i++;
}
public static void main(String[] args) {
incr();
}
}
2.编译代码
生成 【.class】 文件
javac VolatileCode.java
得到VolatileCode.class文件
3.生成汇编文件(机器码)
java -server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:CompileCommand=compileonly,*VolatileCode.incr 【包名.】VolatileCode > 汇编.txt
-XX:CompileCommand=command,method【该参数用于定制编译需求,比如打印某个方法汇编代码或过滤某个方法不做JIT编译】,command选项有如下:
exclude,跳过编译指定的方法
compileonly,只编译指定的方法
inline/dontinline,设置是否内联指定方法
print,打印生成的汇编代码
break,JVM以debug模式运行时,在方法编译开始处设置断点
quiet,不打印在此命令之后、通过-XX:CompileCommand指定的编译选项
4. 生成字节码文件
javap -v -c -s -l VolatileCode.class >字节码.txt