深入理解Java虚拟机--浅析class文件字节码【JVM虚拟机(二)】

代码示例如下:

package com.demo;

public class Test {
    int add() {
        int a = 3;
        int b = 8;
        return a + b;
    }
}

javap查看编译机制

解析指令集:

 int add();
    Code:
       0: iconst_3          压入常量3到操作数栈顶
       1: istore_1          将栈顶int型数值存入本地变量表中索引为1的Slot上,同时出栈
       2: bipush        8  压入8到操作数栈顶
       4: istore_2         将栈顶int型数值存入本地变量表中索引为2的Slot上,同时出栈
       5: iload_1           将局部变量表中访问索引为1的Slot上的数值3重新压入操作数栈的栈顶
       6: iload_2           将局部变量表中访问索引为2的Slot上的数值8重新压入操作数栈的栈顶
       7: iadd                将栈顶的两个数值相加(同时出栈),得到的结果存入栈顶。
       8: ireturn            将返回地址中存储的PC地址返到PC,栈帧恢复到调用前

备注:是不是会有疑问,变量表明明是0开始的,为什么直接放在索引1的slot开始,而不是0,看下图就清楚了,原来0的位置是实例的引用,即this。

过程如图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值