2016-05-19|1462阅|作者:ajjrx|举报 摘要:JDK 、JRE 、JVM、JAVA解释器、DVM的区别
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解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。解释器不能单独执行,必须要有虚拟机。解释器它的作用只是把代码解释成虚拟机能够读懂的东西(从技术上讲,当main函数执行到最后时,程序并不会终止,而是继续执行调用main函数的程序,即Java解释器。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并不依赖其他外部条件,所以它可以运行在各种平台之上。