教你快速阅读java简单字节码

我们举例代码

public class Read {
    public static void main(String[] args) {
        int a=20;
        int b=30;
        a+=1;
        b+=15;
        System.out.println((a+b)/2);

    }

}

我们将他进行运行,我们就会在target教你快速阅读java简单字节码_第1张图片

里面出现.class文件,我们需要进入

执行这个代码

javap -c Read.class

 就会出现字节码

  public static int cal();
    Code:
       0: bipush        20
       2: istore_0
       3: bipush        30
       5: istore_1
       6: iinc          0, 1
       9: iinc          1, 15
      12: iload_0
      13: iload_1
      14: iadd
      15: iconst_2
      16: idiv
      17: ireturn
}

 解读:

  public static int cal();
    Code:
       0: bipush        20     //将常量值20压入操作数栈。这表示将整数值20放入栈顶
       2: istore_0             //将操作数栈顶的值存储到局部变量0(即a)。即将栈顶的值20弹//出,并存储到变量a中。
       3: bipush        30     //将常量值30压入操作数栈。这表示将整数值30放入栈顶。
       5: istore_1             //操作数栈顶的值存储到局部变量1(即b)。即将栈顶的值30弹出,//并存储到变量b中。
       6: iinc          0, 1   //将局部变量0(即a)的值自增1。这意味着将变量a的值增加1。
       9: iinc          1, 15  // 将局部变量1(即b)的值增加15。这意味着将变量b的值增加15。
      12: iload_0              //将局部变量0(即a)的值加载到操作数栈顶。即将变量a的值压入//栈顶。
      13: iload_1              //将局部变量1(即b)的值加载到操作数栈顶。即将变量b的值压入//栈顶。
      14: iadd                //对栈顶的两个整数值进行相加。将栈顶的两个值相加,并将结果放入栈顶,然后将a,b的值从操作栈中弹出
      15: iconst_2            //将常量值2压入操作数栈。这表示将整数值2放入栈顶。
      16: idiv                // 对栈顶的两个整数值进行整数除法运算。将栈顶的整数除以次栈顶的整数,并将结果放入栈顶。    //: 从当前方法返回栈顶的整数值作为结果
      17: ireturn
}

以及贴下学习链接
 

个人认为看过的里面最说人话的 

友情感谢:两张图让你快速读懂JVM字节码指令 - 知乎 (zhihu.com)

 

你可能感兴趣的:(java,开发语言)