DVM指的是dalvick的虚拟机,每一个Android应用程序都是在它自己的进程中进行的,都拥有一个独立的dalvick虚拟机的实例,而每一个DVM都是Linux中的一个进程。
Android的DVM:
Dalvick是Google设计的专门为Android平台设计的虚拟机,每一个Dalvick应用都可以作为一个独立的Linux进程。为什么要作为一个独立的应用程序呢?因为独立的进程可以防止进程崩溃的时候导致其他的进程也崩溃。
DVM虚拟机和Java运行环境的区别:
一、Dalvick主要是进行对象的生命周期的管理、堆栈的管理、线程的管理、安全异常的管理以及垃圾回收的管理。
Dalvick负责进程的管理以及线程的调度。
总结来说就是:每一个Android应用程序的底层都对应一个Dalvick虚拟机的实例,每一个实例在Linux中都对应一个进程。
二、不同于Java虚拟机运行中的字节编码,Dalvick虚拟机运行的是自己专有的文件:Dex。
Dex文件可以有效的减少文件的大小,这样就能提高程序的IO速度。还有一种odex文件,这个是为了在运行过程中进一步的提高性能,对于dex文件进行更高的一种改进的
三、所有的Android应用程序底层都对应于一个Linux的线程,因为这样可以更好的依赖于系统的进程调度以及线程管理。
四、有一个特殊的虚拟机进程Zygote,他是虚拟机的孵化器,在系统启动的时候就开始工作,对于虚拟机进行初始化,库的加载,如果系统需要一个虚拟机的实例,Zygote会第一时间将自己复制一份,以最快的速度提供给系统一份数据。
对于一些只读的库,所有的虚拟机实例是和Zygote共享一份内存区域。