JDK,JRE,JVM区别与联系,jdkjrejvm区别
JDK,JRE,JVM区别与联系,jdkjrejvm区别
安装的时候由于高版本的JDK自带了JRE,故我们只需要安装JDK即可。
【1】JDK
JDK : Java Development ToolKit(Java开发工具包)。
JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
JDK目录说明:
- bin目录:Java工具的可执行文件,包括: java、Java编译器javac、反编译.class文件javap、密钥管理工具keytool、Java文档工具javadoc等。
- COPYRIGHT文件:版权信息。
- db目录:Java实现的数据库。
- include目录:.h头文件,C语言开发时用到的头文件。比如jni.h是开发jni程序时必须引用的头文件。
- lib目录: Java类库,我们经常看到的dt.jar和tools.jar就在这个目录下。
- src.zip文件:Java类库源码,包括了rt.jar库中的关键部分;除了Java类库,还包含了启动器(launcher)的源码(C语言实现)。
- jre目录:Java运行环境。
dt.jar和tools.jar文件作用
dt.jar包含了Swing包,是运行环境的类库。目前的发展趋势是Java越来越少的用作GUI开发,所以这个类库基本不会用到了。
tools.jar是工具类库,bin目录下的可执行程序,好多都会用到这个类库。比如javac[.exe],javadoc[.exe]等。
jdk\lib目录:
JDK有以下三种版本:
J2SE,standard edition,标准版,是我们通常用的一个版本J2EE;从JDK 5.0开始,改名为Java SE。
enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序;从JDK 5.0开始,改名为Java EE。
micro edtion,主要用于移动设备、嵌入式设备上的java应用程序;从JDK 5.0开始,改名为Java ME。
我们常常用JDK来代指Java API,Java API是Java的应用程序接口,其实就是前辈们写好的一些java Class,包括一些重要的语言结构以及基本图形,网络和文件I/O等等 。
我们在自己的程序中,调用前辈们写好的这些Class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好或者功能更强大的第三方类库供我们使用。
【2】JRE
JRE:Java Runtime Enviromental(java运行时环境)。
也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
JRE目录结构
- bin目录:包含了java运行所需要的可执行文件,比如java[.exe]
- lib目录:包含了运行时依赖的java类库和动态链接库(.so或.dll或.dylib)。其中rt.jar文件是java运行时类库,是我们用到最多的基础类库,包括java.lang,java.io,java.net,java.util等。
【3】JVM
JVM:Java Virtual Mechinal(JAVA虚拟机)。
JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。其主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。
所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。
下面一张图说明三者关系:
我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
结构简图如下:
相关文章
- 暂无相关文章
用户点评