JDK, JRE 与 JVM的区别
解释三者区别之前我们先了解一下作为一名程序员从编写到运行一个程序的过程:
- 编写相应的代码(这个过程中我们可能会用到一些库,例如IO)
- 将代码编译成为类文件
- 解释并执行类文件
接下来我们就根据这个过程来了解JDK,JRE与JVM。
先看一张图
从图中我们可以清晰的看到JDK包含JRE,JRE包含JVM。
什么是JVM
Java Virtual Machine
不论你有没有熟练的掌握Java,你都应该了解一些Java的基本特性,例如Java是面向对象的,Java的平台无关性。其中实现Java平台无关性的关键就是JVM。JVM其实是起到了一个映射的作用,例如,不同的平台(如Mac,Windows)系统底层的执行代码可能不同,JVM的作用就是将类文件解释对应的Mac,Windows能够理解的执行代码。
不同系统对应的JVM是不同的,同一份类文件想要在不同的平台上运行,需要经过不同的JVM的解释(或映射)。
什么是JRE
Java Runtime Environment
JRE是Java程序的运行环境,具体的说就是类文件的运行环境。其作用就是解释并执行类文件。哎呦,听着好像和JVM没有什么区别。这里我根据自己的理解解释一下。
我们来看看JRE的文件夹
其中包含bin文件夹和lib文件夹,我们可以把bin文件夹看作JRE,用来解释并执行类文件,但是解释类文件的过程中可能会用到一些库,这些库JRE是没有的,而是被保存在lib文件夹中。JRE和lib文件夹共同构成了JRE。
什么是JDK
Java Development Kit
如果说执行一个程序只需要JRE的话,那么作为一个程序员,开发一个程序,我们需要JDK。
这是JDK文件夹
我们可以看到JDK文件夹中是包含JRE的,因为开发过程也是需要运行程序的。此外JDK中还有一些工具和编码是可能会用到的库。比如说将程序打包成可执行文件就需要使用相应的工具,读取本地文件需要使用IO库等等。