Java基础(3)-JDK、JRE、JVM区别与联系

一、简介

JDK(Java Development Kit,Java开发工具包) ,是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库

),包含JVM标准实现及Java核心类库。

JRE(Java Runtime Environment Java运行环境) ,是 JDK 的子集,也就是包括 JRE 所有内容,以及开发应用程序所需的编译器和调试器等工具。

JVM(Java Virtual Machine,Java虚拟机), 是JRE的一部分。它是整个Java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行Java字节码文件的虚拟计算机。

Java1.8.*版本官方文档地址:https://docs.oracle.com/javase/8/docs/index.html

关于 JDK、JRE、JVM 之间是什么关系,其实在 Java 平台标准中已经明确定义

Oracle has two products that implement Java Platform Standard Edition (Java SE) 8: Java SE Development Kit (JDK) 8 and Java SE Runtime Environment (JRE) 8.

JDK 8 is a superset of JRE 8, and contains everything that is in JRE 8, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE 8 provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language. Note that the JRE includes components not required by the Java SE specification, including both standard and non-standard Java components.


The following conceptual diagram illustrates the components of Oracle's Java SE products:

 

 

 

二、了解JDK、JRE、JVM

2.1 JDK

JDK(Java Development Kit, Java开发工具包),JDK是提供给Java开发人员使用的。它提供了Java的开发工具、编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等,所以安装了JDK,就不用在单独安装JRE了。JDK的安装目录里面有bin、include、jre、lib等目录。

 

 

 

其中

bin目录:Java工具的可执行文件,包括: java、Java编译器javac、反编译.class文件javap、密钥管理工具keytool、Java文档工具javadoc等。
include目录:.h头文件,C语言开发时用到的头文件。比如jni.h是开发jni程序时必须引用的头文件。
jre目录:Java运行环境。
legal目录:用markdown写的法律文件,供人阅读的,类似于readme、license之类的文件
lib目录:Java类库,我们经常看到的dt.jar和tools.jar就在这个目录下。
COPYRIGHT文件:版权信息。
src.zip文件:Java类库源码,包括了rt.jar库中的关键部分;除了Java类库,还包含了启动器(launcher)的源码(C语言实现)。

2.2 JRE

JRE(Java Runtime Environment Java运行环境) 是 JDK 的子集,也就是包括 JRE 所有内容,以及开发应用程序所需的编译器和调试器等工具。JRE 提供了库、Java 虚拟机(JVM)和其他组件,用于运行 Java 编程语言、小程序、应用程序。JRE的安装目录里面有两个文件夹bin和lib。

 

 

 

其中

bin目录:包含Java平台所使用工具和类库的可执行文件和DLL文件。
lib目录:Java运行时环境所使用的核心类库。
legal目录:用markdown写的法律文件,供人阅读的,类似于readme、license之类的文件

2.3 JVM

JVM(Java Virtual Machine Java虚拟机),Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分。JVM可以理解为是一个虚拟出来的计算机,是可运行java字节码文件的虚拟计算机。

它主要负责把 Java 程序生成的字节码文件,解释成具体系统平台上的机器指令,让其在各个平台运行。当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。

不同平台的JVM都是不同的,但它们都提供了相同的接口。JVM是Java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。要想在不同的操作系统上运行Java程序,就需要在不同操作系统上安装对应的JVM。所以,JVM有Windows版本、MAC版本、Linux版本等。

三、区别和联系

JDK=Java开发工具+JRE

JRE=JVM+Java类库

  • JDK 用于开发,JRE 用于运行Java程序 ;如果只是运行Java程序,可以只安装JRE,无序安装JDK。

  • JDk包含JRE,JDK 和 JRE 中都包含 JVM。

  • JVM 是 Java 编程语言的核心并且具有平台独立性。

 

 

 

四、若干问题

4.1 为什么我们的电脑在装完 jdk 后会有两个版本的 jre

我们会发现, jdk 安装成功后,在安装目录会是这样的

 

 

 

但是呢,而 jdk 的子目录下也存在一个 jre,那两个目录的 jre 相互之间有什么联系吗?

 

 

 

答案是没有联系的。甚至准确的来说,它俩是一样的,无论是用哪一个都是可以的。只是很多人习惯将会单独安装另一个 jre,虽然单独安装的 jre 也并没有被使用,原因可能就是刚开始大家都不清楚 jdk 和 jre 之间的关系,所以就默认的都安装上了。

很明显,jdk 是我们的开发工具包,它集成了 jre ,因此我们在安装 jdk 的时候可以选择不再安装 jre 而直接使用 jdk 中的 jre 运行我们的 Java 程序。(但是大部分人都默认将两个都装上了)。但是如果你的电脑不是用来开发 Java 程序的,而仅仅是用来部署和运行 Java 程序的,那么完全可以不用安装 jdk,只需要安装 jre 即可。

4.2 Java 为什么能跨平台,实现一次编写,多处运行?

Java 能够跨平台运行的核心在于 JVM 。不是 Java 能够跨平台,而是它的 JVM能够跨平台。我们知道,不同的操作系统向上的 API 肯定是不同的,那么如果我们想要写一段代码调用系统的声音设备,就需要针对不同系统的 API 写出不同的代码来完成动作。

而 Java 引入了字节码的概念,JVM 只能认识字节码,并将它们解释到系统的 API 调用。针对不同的系统有不同的 jvm 实现,有 Linux 版本的 JVM实现,也有 Windows 版本的 JVM实现,但是同一段代码在编译后的字节码是一样的。引用上面的例子,在 Java API 层面,我们调用系统声音设备的代码是唯一的,和系统无关,编译生成的字节码也是唯一的。但是同一段字节码,在不同的 JVM实现上会映射到不同系统的 API 调用,从而实现代码的不加修改即可跨平台运行。

 

posted @ 2021-10-20 18:37  joshua317  阅读(612)  评论(0编辑  收藏  举报