代码示例如下:
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。
过程如图: