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.

▲如有纰漏,烦请指正~~

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐