只要学过 Java 的同学都应该认识 jdk 和 jre,但是小弟在这先问问大家是否真的了解呢?下面让我带领大家去揭开它的面纱。
- jdk (Java Development Kit) 即 Java 开发工具包
- jre (Java Runtime Environment) 即 Java 运行环境
jvm
JVM -- java virtual machineJVM 就是我们常说的 java 虚拟机,它是整个 java 实现跨平台的最核心的部分,所有的 java 程序会首先被编译为 .class 的类文件,这种类文件可以在虚拟机上执行,也就是说 class 并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
jre
jre 既然是 java 运行环境,那么就必须包括 jvm 即虚拟机,可以在 jre/bin/server 中找到 jvm.dll;还有许多 java 类库和 class 文件都在 lib 目录下被打包成了 jar 。
切记 jre 面向的是 java 使用者而非开发者。
jdk
jdk 简单说就是向开发人员提供了 SDK(Software Development Kit),提供了 java 开发环境和运行环境,则在 jdk 中还包括 jre 文件,大家可以打开自己的 jdk 目录验证便知。
综述
光有 JVM 还不能成 class 的执行,因为在解释 class 的时候 JVM 需要调用解释所需要的类库 lib。在 JDK 的安装目录里你可以找到 jre 目录,里面有两个文件夹 bin 和 lib ,在这里可以认为bin里的就是 jvm,lib 中则是 jvm 工作所需要的类库,而jvm和 lib和起来就称为 jre。所以,在你写完java程序编译成 .class 之后,你可以把这个.class 文件和 jre 一起打包发给朋友,这样你的朋友就可以运行你写程序了。(jre 里有运行 .class 的 java.exe)
让我们看一下 JDK 的安装目录。在目录下面有五个文件夹、src 类库源码压缩包、和其他几个声明文件。其中,真正在运行 java 时起作用的是以下四个文件夹:bin、include、lib、 jre。现在我们可以看出这样一个关系,JDK 包含 JRE,而 JRE 包含 JVM 。bin:最主要的是编译器(javac.exe) ,include:java和JVM交互用的头文件,lib:类库,jre:java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说 JDK 是用于java程序的开发,而 jre 则是只能运行 class 而没有编译的功能。
eclipse、idea等其他 IDE 有自己的编译器而不是用 JDK bin 目录中自带的,所以在安装时你会发现他们只要求你选中 jre 路径就ok了。