JAVA:如何查看代码在JVM底层的指令集?
·
Java 源代码编译成.class文件后,JVM 可执行的底层指令集。要获取这样的字节码,可通过以下步骤:
1. 准备 Java 源代码
先编写包含目标方法的 Java 类,例如:
public class IncrDemo {
private int i;
public void incr() {
i++;
}
}
2. 编译生成.class 文件
使用javac命令编译:
javac IncrDemo.java
会生成IncrDemo.class文件。
3. 用javap工具反编译字节码
执行以下命令,即可输出类似图中的字节码指令:
javap -c IncrDemo
D:\Data\JAVA面试班\code\demo1>javap -c JavaPDemo.class
Compiled from "JavaPDemo.java"
public class JavaPDemo {
public JavaPDemo();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public void incr();
Code:
0: aload_0
1: dup
2: getfield #2 // Field i:I
5: iconst_1
6: iadd
7: putfield #2 // Field i:I
10: return
}
字节码指令解析(以incr()方法为例):
0: aload_0:加载当前对象到操作数栈。
1: dup:复制操作数栈顶的对象引用。
2: getfield #2:获取对象的i字段值(对应源代码的i)。
5: iconst_1:将常量1压入操作数栈。
6: iadd:将栈顶的两个int值相加(实现i + 1)。
7: putfield #2:将相加结果写回i字段。
10: return:方法返回。
这些指令是 JVM 执行i++操作的底层逻辑,通过javap工具可直观查看,常用于分析 JVM 执行机制、排查并发问题(如指令重排)等场景。
Studying will never be ending.
▲如有纰漏,烦请指正~~
更多推荐
所有评论(0)