Android应用运行在Dalvik/ART虚拟机,每个应用程序就是一个进程。每个进程都对应一个单独的Dalvik虚拟机实例。Dalvik虚拟机执行的是dex文件。
基于栈的虚拟机
基于栈的虚拟机,每一个运行时的线程都有一个独立的栈。栈中记录了方法调用的历史,每有一次方法调用,栈中便会多一个栈帧。最顶部的栈帧称作当前栈帧。其代表着当前执行的方法。基于栈的虚拟机通过操作数栈进行所有操作。
基于寄存器的虚拟机
寄存器
寄存器时CPU的组成部分。寄存器是有限存储容量的高速存储部件,它们可以用来暂存指令、数据和位址。
基于寄存器的虚拟机中没有操作数栈,但是有很多虚拟寄存器。其实和操作数栈相同,这些寄存器也存放在运行时栈中,本质上就是一个数组。与JVM相似,在Dalvik VM中每个线程都有自己的PC和调用栈,方法调用的活动记录以帧为单位保存在调用栈上。与JVM相比,可以发现Dalvik版程序的指令数明显减少了,数据移动次数也明显减少了。
ART与Dalvik
Dalvik虚拟机执行的是dex字节码,解释执行。从Android2.2版本开始,支持JIT即使编译(Just In Time)在程序运行的过程中进行选择热点代码(经常执行的代码)进行编译或者优化
而ART(Android Runtime)是在Android4.4中引入的一个开发者选项,也是Android5.0及更高版本的默认Android运行时。ART虚拟机执行的是本地机器码。Android的运行时从Dalvik虚拟机替换成ART虚拟机,并不要求开发者