JDK:JDK(Java Development Kit),顾名思义是java程序的开发包,任何java程序想要运行都需要相应版本的JDK,可以到oracle下载(下载之后自带JRE和编译工具等,无需单独下载)
JRE:JRE(Java Runtime Environment)java运行环境,并非开发环境,它包含了jvm的一些标准实现和java最核心的类库。在JDK安装之后会弹出JRE安装包(一版安装在JDK目录下),而在JRE安装目录下有两个重要 的文件夹(bin和lib),可以粗浅的认为bin是JVM,而lib里面JVM工作需要的java最核心了类库,可以粗浅的认为JRE是由JVM和java核心类库组成的。
JVM:JVM(Java Virtual Machine)java虚拟机,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它是java跨平台运行的关键(Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。)java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。
JDK、JRE和JVM三者关系:用一张图标识
所以,我们可以粗浅的认为:我们的java代码由JDK的编译器,编译成字节码(以.class结尾文件,也称为2进制文件),再由JVM(解释器)把字节码解释成具体平台上的机器指令执行。也就是说只要在不同平台上安装对应的JVM(不同平台有不同平台版本的JVM),就可以运行字节码文件,运行我们编写的Java程序。
注意:编译器是JDK自身带的,和编译工具(例如eclipse、idea等)不一样,编译工具只是给了我们一个可视化写代码的地方,也就是说只是一个写java文件的文本编辑器,而编译器是把我们通过编译工具写的java代码编译成字节码。
以上是本人对JDK、JRE和JVM的一些浅薄理解,如果有错误,欢迎大家在留言指正,相互学习,共同进步!