dalvik虚拟机和sunjvm在架构和执行方面的本质区别

dalvik虚拟机和sunjvm在架构和执行方面的本质区别

ID:8793648

大小:193.22 KB

页数:6页

时间:2018-04-07

dalvik虚拟机和sunjvm在架构和执行方面的本质区别_第1页
dalvik虚拟机和sunjvm在架构和执行方面的本质区别_第2页
dalvik虚拟机和sunjvm在架构和执行方面的本质区别_第3页
dalvik虚拟机和sunjvm在架构和执行方面的本质区别_第4页
dalvik虚拟机和sunjvm在架构和执行方面的本质区别_第5页
资源描述:

《dalvik虚拟机和sunjvm在架构和执行方面的本质区别》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Dalvik虚拟机和SunJVM在架构和执行方面的本质区别  Dalvik虚拟机和SunJVM核心的差异,就是Dalvik虚拟机架构是register-based,与SunJDK的stack-based不同,也就是架构上的差异。我先摘录几段网上可以找到的资料,重新整理和排版了一下,由于这些资料在网上经过多次转载,转发和加工,原作者不详,所以无法标注其原作者们,如有原作者认领或者质疑,请及时通知我。  (1)DalvikVM和JVM的第一个区别是DalvikVM是基于寄存器的架构(regbased),而JVM是栈机(stackbased)。regbasedVM的好处是可

2、以做到更好的提前优化(ahead-of-timeoptimization)。另外regbased的VM执行起来更快,但是代价是更大的代码长度。  (2)另外一个区别是Dalvik可以允许多个instance运行,也就是说每一个Android的App是独立跑在一个VM中.这样做的好处是一个Appcrash只会影响到自身的VM,不会影响到其他。Dalvik的设计是每一个Dalvik的VM都是Linux下面的一个进程。那么这就需要高效的IPC。另外每一个VM是单独运行的好处还有可以动态active/deactive自己的VM而不会影响到其他VM  (3)接下来就是关于版权之

3、类争论。(可以参看下面文章)  既然regbasedVM有那么多好处,为什么之前设计JAVA的人没有采用regbased而是采用stackbased的呢?原来stackbased的VM也有其优点,就是它不对host平台的reg数量做假设,有利于移植到不同的平台。而Dalvik则不关心这些,因为它本来就是为ARM这样的多reg平台设计的。另外Dalvik被移植到x86也说明,即使是x86这种reg很少的平台,regbased的VM也是没有问题的。  下面着重说下DVM的优势:(部分文字我加黑以突出)  1、在编译时提前优化代码而不是等到运行时  2、虚拟机很小,使用的空

4、间也小;被设计来满足可高效运行多种虚拟机实例。  3、常量池已被修改为只使用32位的索引,以简化解释器  JVM的字节码主要是零地址形式的,概念上说JVM是基于栈的架构。GoogleAndroid平台上的应用程序的主要开发语言是Java,通过其中的DalvikVM来运行Java程序。为了能正确实现语义,DalvikVM的许多设计都考虑到与JVM的兼容性;但它却采用了基于寄存器的架构,其字节码主要是二地址/三地址的混合形式。  基于栈与基于寄存器的架构,谁更快?现在实际的处理器,大多都是基于寄存器的架构,从侧面反映出基于寄存器比基于栈的架构更与实际的处理器接近。但对于V

5、M来说,源架构的求值栈或者寄存器都可能是用实际机器的内存来模拟的,所以性能特性与实际硬件又有不同。一般认为基于寄存器架构的DalvikVM比基于栈架构JVM执行效率更高,原因是:虽然零地址指令更紧凑,但完成操作需要更多的load/store指令,也意味着更多的指令分派(instructiondispatch)次数与内存访问次数;访问内存是执行速度的一个重要瓶颈,二地址或三地址指令虽然每条指令占的空间较多,但总体来说可以用更少的指令完成操作,指令分派与内存访问次数都较少。我们从下面的截图可以明了的看到与同一段Java代码对应的Javabytecode与Dalvidbyt

6、ecode的比较:  网上一些文章在讨论Dalvik时,大都简单提及Dalvik执行速度比JVM快,但移植性稍差。这里我们延伸探讨一下。在一个解释器上执行VM指令,包含三个步骤,指令分派、访问操作数和执行计算。指令分派(Instructionsdispatch)负责从内存中读取VM指令,然后跳转到相应的解释器代码指令分派中。上面提到过,完成同样的事情,基于栈的虚拟机需要更多的指令,意味着更多的指令分派和内存访问次数,这是JVM的执行性能不如DalvikVM的原因之一。  访问操作数访问操作数(Operandsaccess)是指读取和写回源操作数和目的操作数。Dalvi

7、kVM通过虚拟操作数寄存器来访问操作数,由于具有相近的血缘,Dalvik的虚拟寄存器在映射到物理寄存器方面具有更充分的优势,这也是DalvikVM性能较佳的一个原因。JVM的操作数通过操作数栈来访问,而因为指令中没有使用任何通用寄存器,在虚拟机的实现中可以比较自由的分配实际机器的寄存器,因而可移植性高。作为一个优化,操作数栈也可以由编译器映射到物理寄存器上,减少数据移动的开销。指令执行(Instructionscompute)这个似乎没什么可解释的,老老实实执行就行。指令执行  一个应用中会定义很多类,编译完成后即会有很多相应的CLASS文件,CLA

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。