android -------- java虚拟机和Dalvik虚拟机

java虚拟机

虚拟机是一种抽象化的计算机,经过在实际的计算机上仿真模拟各类计算机功能来实现的。Java虚拟机有本身完善的硬体架构,如处理器、堆栈、寄存器等,还具备相应的指令系统。Java虚拟机屏蔽了与具体操做系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就能够在多种平台上不加修改地运行。java

 

Java虚拟机(Java Virtual Machine 简称JVM)是运行全部Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。安全

 

Dalvik虚拟机

Dalvik是Google公司本身设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合做开发的Android移动设备平台的核心组成部分之一。它能够支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 通过优化,容许在有限的内存中同时运行多个虚拟机的实例,而且 每个Dalvik 应用做为一个独立的Linux 进程执行。独立的进程能够防止在虚拟机崩溃的时候全部程序都被关闭。架构

 

DVM虚拟机Dalvik Virtual Machine,是安卓中使用的虚拟机。所有安卓程序都运行在安卓系统进程里。每个进程相应着一个Dalvik虚拟机实例。工具

 

Dalvik和标准Java虚拟机(JVM)的区别

java虚拟机基于栈。性能

java虚拟机运行的是java字节码。优化

java类会被编译成一个或多个字节码.class文件,打包到.jar文件中,java虚拟机从相应的.class文件和.jar文件中获取相应的字节码spa

 

dalvik虚拟机是基于寄存器的操作系统

Dalvik虚拟机运行的是Dalvik字节码线程

java类被编译成.class文件后,会经过一个dx工具将全部的.class文件转换成一个.dex文件,而后dalvik虚拟机会从其中读取指令和数据
 设计

 

Dalvik和Java之间的另一大区别就是运行环境——Dalvik通过优化,容许在有限的内存中同时运行多个虚拟机的实例,而且每个 Dalvik应用做为一个独立的Linux进程执行。

 

dalvik虚拟机架构:

  

 

Android应用编译及运行流程:

 

 

java虚拟机与Dalvik虚拟机架构不一样。java虚拟机基于栈架构。程序在运行时虚拟机须要频繁的从栈上读取或写入数据。这过程须要更多的指令分派与内存访问次数,会耗费很多CPU时间,对于像手机设备资源有限的设备来讲,这是至关大的一笔开销。Dalvik虚拟机基于寄存器架构,数据的访问经过寄存器间直接传递,这样的访问方式比基于栈方式快的多.

 

DalvikJava运行环境的区别

 

1:Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。

 

2:Dalvik负责进程隔离和线程管理,每个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。

 

3:不一样于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex

 

4:dex文件格式能够减小总体文件尺寸,提升I/o操做的类查找速度。

 

5:odex是为了在运行过程当中进一步提升性能,对dex文件的进一步优化。

 

6:全部的Android应用的线程都对应一个Linux线程,虚拟机于是能够更多的依赖操做系统的线程调度和管理机制

 

7:有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操做。若是系统须要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,全部虚拟机实例都和Zygote共享一块内存区域。

相关文章
相关标签/搜索