Dalvik和JVM的几点区别
1、Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
2、Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
3、Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
4、不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex,ex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
5、所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制
基于平台不同:Dalvik基于寄存器,而JVM基于栈,KVM基于栈
运行环境不同:在有限的内存,允许同时运行多个Dalvik实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。
JVM只能运行一个JVM实例,JVM因平台的不一样进程也不一样。
KVM只能一个实例运行。
运行语言: Dalvik可以运行不同的语言,如java和Scala。
JVM可以运行不同的语言,如java和Python语言
KVM运行j2me语言
运行格式不同:JVM一般是.class,Dalvik是.dex,KVM一般是.class
编写语言:Dalvik是一般由C或C++编写,JVM一般是C++或java编写,KVM一般是C或C++
效率不同:Dalvik是基于寄存器所以效率高于基于栈的JVM,KVM
加载函数不同:Dalvik是Dexfile加载class类文件,JVM和KVM是ClassLoader
http://www.zhihu.com/question/20207106