转载:https://zhuanlan.zhihu.com/p/48487801
ps:Java11 以后没有单独的jre
一、三者的关系
首先 三者之间存在包含关系
JVM + 核心类库 = JRE
JRE + java开发工具(javac.exe/jar.exe) = JDK
二、JVM
Java Virtual Machine 即Java虚拟机
我们知道Java语言有一个独特的优点就是可以跨平台
像其它语言,比如C,我们要针对不同操作系统windos,mac……各出一套应用程序
而Java则可以做到一个软件在任何的操作系统中都能执行,这就是JVM的功劳
如下图
本来我们编写的Java代码计算机还是不认识的,但是我们在每一个操作系统上都会配置一个与之相对应的JVM,会帮我们把我们的Java代码翻译成对应操作系统可以识别的内容。
JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
所以说我们在第一次写Java程序时都要先把JVM给装好。
三、JRE
Java Runtime Environment 即Java运行环境
JVM + 核心类库 = JRE
刚才不是说只需要装JVM吗?那这个JRE是个什么鬼东西?
是因为只有JVM不能运行,它还需要核心类库,才能保证Java运行
由于JRE包含JVM 因此我们只要直接安装JRE 就顺便把JVM安装了
四、JDK
Java Development Kit 即Java开发工具包
JRE + java开发工具(javac.exe/jar.exe) = JDK
前面不是说安装了JRE以后,Java程序就可以运行了吗?那为啥子还要安装这个JDK?
这是因为我们是开发人员,我们是写软件的,软件光能运行不行啊,得给我们一个地方让我们来写代码吧?所以就需要java开发工具给我们腾出一个地儿来,好让我们coding
由于JDK包含JRE 因此我们只需要安装JDK就都有了