java虚拟机基于栈,深入理解java虚拟机(11):基于栈的字节码解释执行引擎

1、解释执行

编译过程如下

07848d34de54b4d22484d844b24fca0b.png

2、基于栈的指令集和基于寄存器的指令集

java编译器输出的指令流,基本是一种基于栈的指令集架构,指令流中的大部分指令都是零地址,依赖于操作数工作。与之相对的是基于寄存器的指令集,也就是目前pc支持的指令集。两者的不同,举例如下:

1+1基于栈的指令集iconst_1,iconst_1,iadd,istore_0,基于寄存器的指令集 mov eax 1,add eax 1。基于栈的指令集主要优点就是可移植性强,寄存器由硬件直接提供,程序直接依赖于这些硬件。基于栈的指令集可以自行决定是否将频繁访问数据放到寄存器中获得更好的性能,代码紧凑,编译器实现更加简单。因为栈实现在内存中和指令数量,所以基于栈的指令集要慢些。

3、基于栈的解释执行过程

public int calc(){

int a=100;

int b=200;

int c=300;

return (a+b)*c;

}

public int calc():

Code:

Stack=2,Locals=4,Args_size=1

0:bipush 100

2:istore_1

3:sipush 200

6:istore_2

7:sipush 300

10:istore_3

11:iload_1

12:iload_2

13:iadd

14:iload_3

15:imul

16:ireturn

这段指令执行过程如下

e267f8c933b9e2986a0cda21c37d7792.png

e8fd442d93cc19a2eea09d7f70cf8aaf.png

49b70ddaedc5ae01e6ff48af50019bbe.png

ef52690386c69648ab6d5444410d9aad.png

895a4c4699d5cfe5bf105080128386dc.png

ac8d8d555d7fd0d66ae68e907e424b0a.png

ad2e2434a0e8d9412aaeba359179a5b0.gif

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值