56-JVM执行栈指令集实例剖析

JVM执行栈指令集实例剖析

public class MyTest8 {
    public int myCalculate(){
        int a = 1;
        int b = 2;
        int c = 3;
        int d = 4;
        int result = (a+b-c) * d;
        return result;
    }
}
反编译之后结果:
public int myCalculate();
descriptor: ()I
flags: ACC_PUBLIC
Code:
  stack=2,locals=6,args_size=1 //栈最大深度为2,最多6个局部变量,参数的数量是1:this(在索引0位置)
	 0: iconst_1	//将操作数 1 推送至栈顶
	 1: istore_1	//将操作数栈顶元素1弹出来,然后将该元素的值设置为局部变量表中的索引为1的局部变量的值
	 2: iconst_2   //将操作数 2 推送至栈顶
	 3: istore_2   //将操作数栈顶元素2弹出来,然后将该元素的值设置为局部变量表中的索引为2的局部变量的值
	 4: iconst_3   //将操作数 3 推送至栈顶
	 5: istore_3   //将操作数栈顶元素3弹出来,然后将该元素的值设置为局部变量表中的索引为3的局部变量的值
	 6: iconst_4   //将操作数 4 推送至栈顶 (因为istore只有istore_1~istore_3,所以下面没有下划线)
	 7: istore 4   //将操作数栈顶元素4弹出来,然后将该元素的值设置为局部变量表中的索引为4的局部变量的值
	 9: iload_1    //将局部变量表中(栈帧)索引为1的值推送到栈中
	10: iload_2    //将局部变量表中(栈帧)索引为2的值推送到栈中
	11: iadd       //将栈中的 1、2取出来,进行 加 运算,运算之后再将得到的结果3放置到栈顶
	12: iload_3    //将局部变量表中(栈帧)索引为3的值推送到栈中
	13: isub       //将栈中的 3、3取出来,进行 减 运算,运算之后再将得到的结果4放置到栈顶
	14: iload 4    //将局部变量表中(栈帧)索引为4的值推送到栈中
	16: imul       //将栈中的 4、4取出来,进行 × 运算,运算之后再将得到的结果5放置到栈顶
	17: istore 5   //将栈中的结果5的操作数弹出来,将该值赋给局部变量表中(栈帧)中索引为5的局部变量的值
	19: iload  5   //将局部变量表中(栈帧)索引为5的值推送到栈中
	21: ireturn //将当前栈中栈顶的元素值弹出并作为该方法的返回值,栈中剩余的元素全部舍弃

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值