教你快速阅读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

里面出现.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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值