Android中DVM和java中的JVM区别

JDK:(Java Development Kit) Java软件开发包,可以包括函数库、编译程序等。 

JRE:( Java Runtime Enviroment ) Java的运行环境,是面向Java程序的使用者. 

JVM:(Dalvik Virtual Machine)JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。(目前,SUN系统公司已经设计实现了Java芯片,主要使用在网络计算机NC上。另外,Java芯片的出现也会使Java更容易嵌入到家用电器中。) JVM是Java平台无关的基础 ,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。解释器不能单独执行,必须要有虚拟机。解释器它的作用只是把代码解释成虚拟机能够读懂的东西。Java采用的是基于IEEE标准的数据类型。通过JVM保证数据类型的一致性,也 确保了Java的平台无关性 。 

注意:JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE,所以安装了JDK就有了JRE、JVM和JVM中的java解析器。  

DVM:(Dalvik Virtual Machine)很多人认为DVM是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不准确,因为 Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;同时还有几个的不同点: 

1.Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable),JVM是基于栈的,而DVM基于寄存器(基于寄存器的好处是编译的时候,花费的时间更短,在其他各方面性能上也有很大的提升)。 
2.在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件,而后Java虚拟机会从相应的CLASS文件和JAR文件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,但是在编译成CLASS文件后,还会通过一个工具 (dx)将应用所有的 CLASS文件转换成一个DEX文件 ,而后DVM会从其中读取指令和数据。 
3.DVM依赖于Linux内核的一些功能,如线程和底层内存管理机制。所以DVM只能运行在Android操作系统上,JVM并不依赖其他外部条件,所以它可以运行在各种平台之上。 

你可能感兴趣的:(java,android,jvm,dalvik,android,java)