为什么是Dalvik虚拟机而不用JVM虚拟机?

结论:Dalvik虚拟机是基于寄存器之上,而JVM虚拟机基于栈。Dalvik虚拟机的效率会更高。

1.基于寄存器与基于栈的工作原理是什么,为什么会导致效率更高?

1.1栈虚拟机

栈,后进先出,听起来就很黄的样子。这里面有一个叫做操作数栈的概念。任何对于内存的操作都要经过这个操作数栈,尽管这个操作数栈,与变量同在内存里,依然需要先传递到操作数栈,然后再由操作数栈进行处理。看图:


当我们声明一个int a = 11; 的时候,虚拟机需要先将11从变量表,传递到操作数栈中,才能够进行使用。

如果进行一个简单的加法,int a = 11;int b = 22;int c = a + b;

基于栈的虚拟机上字节码指令如下所示:

1.load a;

2.load b

3.add

4.storge c

字节码很短,但是行数很多。

另外,每次将变量从变量表copy至操作数栈中,都要经过CPU总线进行传输(虽然都在内存里,但是内存之前的数据传递还是要走CPU总线)。也就是说,load a 一次,先把数据传至CPU,CPU再将数据放入,数据栈。

1.load a -> cpu -> 数据栈 ,2次

2.load b -> cpu -> 数据栈 ,2次

3.add 从操作数栈中传递至CPU 2次 ,add 操作完放回操作数栈,3次

4.storge c 操作数栈 -> CPU -> 数据表,2次。

这个就是基于栈的虚拟机效率问题,一次加法操作,经过CPU次数9次。


1.2寄存器虚拟机

基于寄存器的虚拟机则没有操作数栈的概念,寄存器本身就是CPU的一部分用于存放指令,数据和地址,因此寄存器操作一次简单的加法,只要找到a,找到b,将a和b送入CPU中去进行计算,CPU将计算结果送回寄存器。

只要3次。

而且字节码只有一句

1.add a, b, c

2.基于寄存器与基于栈虚拟机的比较

可移植性:栈  > 寄存器

栈的操作都是通过操作数栈来完成,而不是直接操作CPU。JVM目标是跨平台,所以选择了这种比较中庸的办法。

代码量 : 栈 < 寄存器

执行效率: 栈 < 寄存器


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值