论文部分内容阅读
随着移动网络的发展,移动设备更新速度也很快,虚拟机技术在移动设备领域发挥着重要的作用。Google公司与多个移动设备厂商共同推出的Android平台是嵌入式的操作系统,目前Android平台已经推出到了3.3 Honeycomb版本,此版本主要用于平板电脑。Dalvik虚拟机是Android平台上的虚拟机,Dalvik虚拟机负责Android平台上应用程序的运行,提供平台的多线程支持以及内存垃圾收集,同时Dalvik虚拟机会在执行应用程序的各个阶段优化平台上的应用程序。语言编译阶段通过dex工具生成dex文件,减小程序文件的大小,消除部分无用代码。在编译阶段Dalvik虚拟机在2.1版本之后使用即时编译器,将程序中的“热点”编译成目标机器码,加速程序的运行。Dalvik虚拟机是Android平台的基石,Dalvik的性能决定了Android平台的性能。针对移动设备特点,Dalvik虚拟机使用dex文件格式保存编译之后的程序,每个class文件使用异构的常量池存放数据,在dex文件中,将多个class文件合并为一个dex文件,文件使用5个同构的常量池:stirng_ids,type_ids,proto_ids,field_ids,method_ids。Dex文件把常量分为这5类,并且分别存入不同的常量池,大幅削减了程序需要的内存空间,通过实验dex文件大小仅仅是jar文件的50%左右。不同于HotSpot虚拟机基于栈的操作指令,Dalvik虚拟机的指令集是基于寄存器的,虚拟寄存器中存放操作数,执行过程中指令从虚拟机寄存器中取出操作数并运算,最后将数据放回寄存器中。Dalvik虚拟机使用基于寄存器的指令集充分发挥了ARM系列芯片的多寄存器特点,将虚拟机寄存器映射到对应的芯片寄存器上,有效的减少了程序运行过程中的数据移动,加快了程序的运行速度。在并行运行方面,Dalvik虚拟机支持多线程,由于基于Linux内核,Dalvik采用了Zygote进程模型,这种模型类似于Linux的fork进程。Dalvik的即时编译器有两种状态:方法级的即时编译和路径级的即时编译。方法级的即时编译器对资源的消耗比较大,但是能提供更高的顶峰速度,路径级的即时编译器的编译粒度小,占用的资源少。本文中简单介绍了路径级即时编译器的路径树构建方法以及路径树编译,Dalvik虚拟机在充电时使用方法级的即时编译,用电池作为电源时使用路径级的即时编译,所以Android平台运行速度在充电时会快一些。