Dalvik虚拟机简介及架构级移植优化方向汇.ppt

Dalvik虚拟机简介及架构级移植优化方向汇.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Dalvik虚拟机简介及架构级移植优化方向汇

LOGO LOGO Android Dalvik 虚拟机 初识及架构简析 LOGO 嵌入式系统概述 Dalvik虚拟机与Java虚拟机的区别 Dalvik虚拟机源码目录简析 Dalvik虚拟机专有工具的功能及使用 Dalvik虚拟机初识及基本特性 1 2 3 4 本节主要内容 Dalvik虚拟机核心——执行引擎 5 Dalvik虚拟机的移植及优化方向 6 LOGO 1、Dalvik虚拟机初识及基本特性 什么是Dalvik虚拟机?让我们从认识Java虚拟机开始: Java虚拟机(JVM)是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它有自己完善的硬件架构(如处理器、堆栈、寄存器等),还具有相应的指令系统。使用“Java虚拟机”程序就是为了支持与操作系统无关、在任何系统中都可以运行的程序。 Davlik虚拟机同Java虚拟机同样是运行Java程序的虚拟机,但Davlik虚拟机具有其独特特性: Dalvik虚拟机是Android程序的虚拟机,是Android中Java程序的运行基础。其指令集基于寄存器架构,执行其特有的文件格式——dex字节码来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。它的核心内容是实现库(libdvm.so),架构由C语言实现。依赖于Linux内核的一部分功能——线程机制、内存管理机制,能高效使用内存,并在低速CPU上表现出的高性能。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。让我们看看Dalvik虚拟机处在Android系统架构的什么位置: LOGO LOGO 2、 Dalvik虚拟机与Java虚拟机的区别 然而:Dalvik VM ≠Java VM dalvik基于寄存器,而JVM基于stack? Dalvik执行的是特有的DEX文件格式,而JVM运行的是*.class文件格式。 优势: 1、在编译时提前优化代码而不是等到运行时 2、 虚拟机很小,使用的空间也小;被设计来满足可高效运行多种虚拟机实例。 3、常量池已被修改为只使用32位的索引,以简化解释器 LOGO JVM的字节码主要是零地址形式的,概念上说JVM是基于栈的架构。Google Android平台上的应用程序的主要开发语言是Java,通过其中的Dalvik VM来运行Java程序。为了能正确实现语义,Dalvik VM的许多设计都考虑到与JVM的兼容性;但它却采用了基于寄存器的架构,其字节码主要是二地址/三地址的混合形式。 基于栈与基于寄存器的架构,谁更快?现在实际的处理器,大多都是基于寄存器的架构,从侧面反映出基于寄存器比基于栈的架构更与实际的处理器接近。但对于VM来说,源架构的求值栈或者寄存器都可能是用实际机器的内存来模拟的,所以性能特性与实际硬件又有不同。一般认为基于寄存器架构的Dalvik VM比基于栈架构JVM执行效率更高,原因是:虽然零地址指令更紧凑,但完成操作需要更多的load/store指令,也意味着更多的指令分派(instruction dispatch)次数与内存访问次数;访问内存是执行速度的一个重要瓶颈,二地址或三地址指令虽然每条指令占的空间较多,但总体来说可以用更少的指令完成操作,指令分派与内存访问次数都较少。? 我们从下面的截图可以明了的看到与同一段Java代码对应的Java bytecode 与Dalvid bytecode的比较。 LOGO LOGO Dalvik字节码以16位为单元(或许叫“双字节码”更准确 )。上面代码中有5条指令,其中mul-int/lit8指令占2单元,其余每条都只占1单元,共6单元==12字节。 Java字节码以1字节为单元。上面代码中有11条指令,每条都只占1单元,共11单元==11字节。? 基于寄存器与基于栈的区别更详细的介绍见补充文档。 LOGO Dalvik专有的DEX文件格式 一个应用中会定义很多类, 编译完成后即会有很多相应 的CLASS文件,CLASS文 件间会有不少冗余的信息。 dex字节码和标准Java的字节码(Class)在结构上的一个区别是dex字节码将多个文件整合成一个,这样,除了减少整体的文件尺寸,I/O操作,也提高了类的查找速度。 原来每个类文件中的常量池现在由DEX文件中一个常量池来管理。 DEX文件可以进行进一步优化。优化主要是针对以下几个方面: 1、调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的没一个域 2、验证DEX文件中的所有类 3、对一些特定的类进行优化,对方法里

您可能关注的文档

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档