网站大量收购闲置独家精品文档,联系QQ:2885784924

dalvik虚拟机遵循的开源协议-gpl.doc

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
dalvik虚拟机遵循的开源协议?gpl 篇一:Dalvik 虚拟机和 Sun JVM 在架构和执行方面的本质区别 Dalvik 虚拟机和 Sun JVM 在架构和执行方 面的本质区别 Dalvik 虚拟机和 Sun JVM核心的差异,就是Dalvik 虚拟机架构是 register-based,与 Sun JDK 的 stack-based 不同,也就是架构上的差异。我先摘录几段网上可以找到的资料,重新整理和排版了一下,由于这些资料在网上经过多次转载,转发和加工,原作者不详,所以无法标注其原作者们,如有原作者认领或者质疑,请及时通知我。 (1) Dalvik VM和JVM 的第一个区别是 Dalvik VM是基于寄存器的架构(reg based),而JVM是栈机(stack based)。reg based VM的好处是可以做到更好的提前优化 (ahead-of-time optimization)。 另外reg based的VM执行起来更快,但是代价是更大的代码长度。 (2) 另外一个区别是Dalvik可以允许多个instance 运行,也就是说每一个Android 的App是独立跑在一个VM中.这样做的好处是一个App crash只会影响到自身的VM,不会影响到其他。 Dalvik的设计是每一个Dalvik的VM都是Linux下面的一个进程。那么这就需要高效的IPC。另外每一个VM是单独运行的好处还有可以动态 active/deactive自己的VM而不会影响到其他VM (3) 接下来就是关于版权之类争论。(可以参看下面文章) 既然reg based VM有那么多好处,为什么之前设计JAVA的人没有采用reg based而是采用stack based的呢? 原来stack based的VM也有其优点,就是它不对host平台的reg数量做假设,有利于移植到不同的平台。而Dalvik则不关心这些,因为它本来就是为ARM 这样的多reg平台设计的。另外Dalvik被移植到x86也说明,即使是x86这种reg很少的平台,reg based的VM也是没有问题的。 下面着重说下DVM的优势:(部分文字我加黑以突出) 1、在编译时提前优化代码而不是等到运行时 2、 虚拟机很小,使用的空间也小;被设计来满足可高效运行多种虚拟机实例。 3、常量池已被修改为只使用32位的索引,以 简化解释器 JVM 的字节码主要是零地址形式的,概念上说JVM是基于栈的架构。Google Android平台上的应用程序的主要开发语言是Java,通过其中的Dalvik VM来运行Java程序。为了能正确实现语义,Dalvik VM的许多设计都考虑到与JVM的兼容性;但它却采用了基于寄存器的架构,其字节码主要是二地址/三地址的混合形式。 基于栈与基于寄存器的 架构,谁更快?现在实际的处理器,大多都是基于寄存器的架构,从侧面反映出基于寄存器比基于栈的架构更与实际的处理器接近。但对于VM来说,源架构的求值 栈或者寄存器都可能是用实际机器的内存来模拟的,所以性能特性与实际硬件又有不同。一般认为基于寄存器架构的Dalvik VM比基于栈架构JVM执行效率更高,原因是:虽然零地址指令更紧凑,但完成操作需要更多的load/store指令,也意味着更多的指令分派 (instruction dispatch)次数与内存访问次数;访问内存是执行速度的一个重要瓶颈,二地址或三地址指令虽然每条指令占的空间较多,但总体来说可以用更少的指令完 成操作,指令分派与内存访问次数都较少。 我们从下面的截图可以明了的看到与同一段Java代码对应的Java bytecode 与Dalvid bytecode的比较: 网上一些文章在讨论 Dalvik 时,大都简单提及 Dalvik 执行速度比 JVM 快,但移植性稍差。这里 我们延伸探讨一下。在一个解释器上执行 VM 指令,包含三个步骤,指令分派、访问操作数和执 行计算。 指令分派(Instructions dispatch)负责从内存中读取 VM 指令,然后跳转到相应的解释器代码 指令分派 中。上面提到过,完成同样的事情,基于栈的虚拟机需要更多的指令,意味着更多的指令分派和 内存访问次数,这是 JVM 的执行性能不如 Dalvik VM 的原因之一。 访问操作数 访问操作数(Operands access)是指读取和写回源操作数和目的操作数。Dalvik VM 通过虚拟 操作数 寄存器来访问操作数, 由于具有相近的血缘, Dalvik 的虚拟寄存器在映射到物理寄存器方面具有 更充分的优势, 这也是 Dalvik VM 性能较佳的一个原因。 JVM 的操作数通过操作数栈来访问, 而 因为指令中没有使用任何通用

文档评论(0)

精品文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档