1. Dalvik
==========
Dalvik是Google公司自己设计用于Android平台的虚拟机。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex 格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
在 Android L (Android 5.0) 之前叫作 DVM,5.0 之后直接删除DVM,代替它的是传闻已久的ART(Android Runtime)。
在整个 Android 操作系统体系中,ART 位于下图黄色小方块位置:
不是说被删除就无用了,咱们毕竟做这一行的还是要简单的了解一下。
1.1 Dalvik 和 JVM 区别
-
Dalvik 基于寄存器,而 JVM 基于栈。
-
基于寄存器的虚拟机对于更大的程序来讲,在它们编译的时候,花费的时间更短。
-
JVM字节码中,局部变量会被放入局部变量表中,继而被压入堆栈供操做码进行运算,固然JVM也能够只使用堆栈而不显式地将局部变量存入变量表中。
-
Dalvik字节码中,局部变量会被赋给65536个可用的寄存器中的任何一个,Dalvik指令直接操做这些寄存器,而不是访问堆栈中的元素。
1.2 Dalvik 如何运行 java
-
VM字节码由.class文件组成,每一个文件一个class。
-
JVM在运行的时候为每个类装载字节码。相反的,Dalvik程序只包含一个.dex文件,这个文件包含了程序中全部的类。
-
Java编译器建立了JVM字节码以后,Dalvik的dx编译器删除.class文件,从新把它们编译成Dalvik字节码,而后把它们写进一个.dex文件中。这个过程包括翻译、重构、解释程序的基本元素(常量池、类定义、数据段)。
-
常量池描述了全部的常量,