JVM和Dalvik VM的简要区别

Dalvik虚拟机与Java虚拟机的最显著区别是它们分别具有不同的类文件格式以及指令集。Dalvik虚拟机使用的是dex(Dalvik Executable)格式的类文件,而Java虚拟机使用的是class格式的类文件。一个dex文件可以包含若干个类,而一个class文件只包括一个类。由于一个dex文件可以包含若干个类,因此它就可以将各个类中重复的字符串和其它常数只保存一次,从而节省了空间,这样就适合在内存和处理器速度有限的手机系统中使用。一般来说,包含有相同类的未压缩dex文件稍小于一个已经压缩的jar文件。Dalvik虚拟机使用的指令是基于寄存器的,而 Java虚拟机使用的指令集是基于堆栈的。基于堆栈的指令很紧凑,例如,Java虚拟机使用的指令只占一个字节,因而称为字节码。基于寄存器的指令由于需要指定源地址和目标地址,因此需要占用更多的指令空间,例如,Dalvik虚拟机的某些指令需要占用两个字节。基于堆栈和基于寄存器的指令集各有优劣,一般而言,执行同样的功能,前者需要更多的指令(主要是load和store指令),而后者需要更多的指令空间。需要更多指令意味着要多占用CPU时间,而需要更多指令空间意味着数据缓冲(d-cache)更易失效。

 总结:

(一)、结构:JVM是基于堆栈, Dalvik VM是基于寄存器。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。

(二)、编译:JVM:.java>.class>.jar

               Dalvik VM:  .java>class>.dex>.odex

(三)、运行:JVM:jar中有多个.class文件

            Dalvik VM:.apk中只有一个.dex文件(不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式dex,ex文件格式可以减少整体文件尺寸,提高I/O操作的类的查询速度)

            前者慢。

文章来源:

https://blog.csdn.net/z374082728/article/details/50914955

猜你喜欢

转载自blog.csdn.net/augfun/article/details/82904377