public int getSum(){
int i = 12;
int j = 5;
int k = i + j;
return k;
}
public void testGetSum() {
int i = getSum();
int j = 16;
}
上面两个方法对应的字节码指令
getSum方法
0 bipush 12
2 istore_1
3 iconst_5
4 istore_2
5 iload_1
6 iload_2
7 iadd
8 istore_3
9 iload_3
10 ireturn
testGetSum方法
0 aload_0 //把this从局部变量表中读取,压入操作数栈中
1 invokevirtual #7 <OperatorStackTest.getSum> //利用this调用getSum方法,返回值保存在栈中
4 istore_1 //将栈中的数保存到局部变量表中的slot 1
5 bipush 16 //将16压入操作数栈
7 istore_2 //从操作数栈中读取,存放到局部变量表slot 2的位置
8 return
总结
push是将操作数压入栈中
store是将操作数从栈中取出,然后存入到局部变量表
load是从局部变量表中将操作数读出,放入栈中
add是在栈中做操作数的相加运算,运算结果依然保存在栈中