dalvik和Jvm的区别

来源:互联网 发布:win 启动mysql命令 编辑:程序博客网 时间:2024/05/17 03:32

在Android的体系框架中有一部分叫做Android Runtime,即Android运行时环境,这个环境包括了两个部分,一个是Android的核心类库,还有一个就是Dalvik虚拟机了。Dalvik虚拟机对内存具有高效的使用,以及在低速CPU上运行具有高性能。 依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例, 其代码在虚拟机的解释下得以执行。Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容。
Dalvik虚拟机运行的专有的文件格式Dex(Dalvik Executable)文件。Android应用虽然也是使用Java语言进行编程,但是在编译成class文件后,还会通过一个工具(dx)将应用所有的 class文件转换成一个Dex文件,而后Dalvik虚拟机会从其中读取指令和数据。Dalvik虚拟机运行的是其专有的文件格式Dex,Dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。所有的Android应用的线程都对应一个Linux线程,虚拟机因此可以更多的依赖操作系统的线程调度和管理机制
Java虚拟机运行java字节码。在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到jar文件,而后Java虚拟机会从相应的class文件和jar文件中获取相应的字节码

架构设计:Dalvik基于寄存器。寄存器是在cpu上的一块存储空间,cpu如果直接从寄存器上读取数据的话就会快很多。
JVM基于栈。所以每次访问数据cpu都要到内存中取到数据

运行效率:Dalvik是基于寄存器效率高于基于栈的JVM

编写语言:Dalvik是由C或C++编写,JVM是由C++或java编写

运行环境:Dalvik在有限的内存,允许同时运行多个Dalvik实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。
JVM在有限的内存只能运行一个JVM实例,JVM因平台的不一样进程也不一样。

运行格式:Jvm一般是.class。jvm是把.java文本编译成.class字节码文件,在执行java程序的时候,类加载器把需要的类全
部加载到内存当中去。
Dalvik是.dex。把.java文件编译成.class文件,又把.class文件转换成.dex文件,dalvik来执行.dex文件。

函数加载:Dalvik是Dexfile加载class类文件,JVM和KVM是ClassLoader。

版权归属:Dalvik归属google。Jvm归属甲骨文。