分析操作数栈和局部变量表配合的字节码指令

    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是在栈中做操作数的相加运算,运算结果依然保存在栈中

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容