【Android 】Dalvik虚拟机和JVM虚拟机的区别

时间:2022-12-23 20:10:53

一:功能架构上的区别?

      注:首先要阐明Dalvik虚拟机与Java虚拟机是完全不同的虚拟机,

1. Dalvik虚拟机是完全为了Android量身定制的一款虚拟机,用于提高对于移动设备内存的高效实用,和在低速CPU上提高运行性能,        并且依赖于Linux底层POSIX兼容的操作系统,可以简单的完成进程隔离和线程管理;

2. JVM虚拟机是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬   件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成       在Java虚拟机上解释运行的目标代码字节码.class文件),就可以在多种平台上不加修改地运行。


二:虚拟机运行文件的区别?

1.Dalvik虚拟机运行优化后的.DEX格式的文件  

【Android 】Dalvik虚拟机和JVM虚拟机的区别【Android 】Dalvik虚拟机和JVM虚拟机的区别

注:为什么Dalvik 虚拟机选择弃用原有的.class字节码文件而使用.dex文件运行程序么?

       ①.一个Android应用中可能存在很多的类文件,编译后会产生很多的 .class 文件,并且.class文件间会有不少冗余的信息,而DEX文件会把所有的.class文件整合到一个文件中,这样除了减少了整体的文件大小,I/O操作,也提高了类的查找速度,原来每个类都会开一个常量池,现在.dex文件中使用唯一的常量池来管理。

       ②.dex进行了除上述优化之外还进行了如下的优化工作:调整所有字段的字节序个对齐结构中的每一个域;验证DEX文件中的所有类;对一些特定的类进行优化,对方法里面的操作码进行优化;

       ③.优化时机:其一在编译生成APK附加生成一个ODEX优化文件(APK 中不包含DEX文件);其二在APK首次安装的时候apk中存在的dex文件会在运行的时候被优化并保存在系统缓存中;

2.JVM虚拟机运行.class文件或者经过打包的.jar文件

【Android 】Dalvik虚拟机和JVM虚拟机的区别

【Android 】Dalvik虚拟机和JVM虚拟机的区别

三:Dalvik虚拟机在Android中地位:

1.Dalvik  虚拟机存在于Android系统架构中的Android RunTime层;

2.Dalvik 虚拟机主要完成对象生命周期管理,堆栈管理,线程管理,安全和异常的管理,垃圾回收;

3.每个Android应用都独立运行于一个Dalvik虚拟机实例里,而每一个Dalvik实例存在于一个独立的进程空间;所有Android应用的线程都对应一个Linux线程;