一:功能架构上的区别?
注:首先要阐明Dalvik虚拟机与Java虚拟机是完全不同的虚拟机,
1. Dalvik虚拟机是完全为了Android量身定制的一款虚拟机,用于提高对于移动设备内存的高效实用,和在低速CPU上提高运行性能, 并且依赖于Linux底层POSIX兼容的操作系统,可以简单的完成进程隔离和线程管理;
2. JVM虚拟机是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬 件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成 在Java虚拟机上解释运行的目标代码(字节码.class文件),就可以在多种平台上不加修改地运行。
二:虚拟机运行文件的区别?
1.Dalvik虚拟机运行优化后的.DEX格式的文件
注:为什么Dalvik 虚拟机选择弃用原有的.class字节码文件而使用.dex文件运行程序么?
①.一个Android应用中可能存在很多的类文件,编译后会产生很多的 .class 文件,并且.class文件间会有不少冗余的信息,而DEX文件会把所有的.class文件整合到一个文件中,这样除了减少了整体的文件大小,I/O操作,也提高了类的查找速度,原来每个类都会开一个常量池,现在.dex文件中使用唯一的常量池来管理。
②.dex进行了除上述优化之外还进行了如下的优化工作:调整所有字段的字节序个对齐结构中的每一个域;验证DEX文件中的所有类;对一些特定的类进行优化,对方法里面的操作码进行优化;
③.优化时机:其一在编译生成APK附加生成一个ODEX优化文件(APK 中不包含DEX文件);其二在APK首次安装的时候apk中存在的dex文件会在运行的时候被优化并保存在系统缓存中;
2.JVM虚拟机运行.class文件或者经过打包的.jar文件
三:Dalvik虚拟机在Android中地位:
1.Dalvik 虚拟机存在于Android系统架构中的Android RunTime层;
2.Dalvik 虚拟机主要完成对象生命周期管理,堆栈管理,线程管理,安全和异常的管理,垃圾回收;
3.每个Android应用都独立运行于一个Dalvik虚拟机实例里,而每一个Dalvik实例存在于一个独立的进程空间;所有Android应用的线程都对应一个Linux线程;