你了解JDK、JRE、JVM分别是什么及它们之间的有什么关联吗?
对于Java来说,了解JDK、JRE、JVM分别是什么及它们之间的关系可以帮助我们更好的去理解java语言的特性。
Java程序是运行在JVM(Java虚拟机)上的,在开发程序之前要配置Java开发环境,即JDK的安装和配置。
三者的结构图如下:
▎JDK
JDK(Java Development Kit): 是Java的标准开发工具包(普通用户只需要安装 JRE就可以运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序)。它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环境JRE,以及常用的Java基础类库等,是整个JAVA的核心。
JDK一般有三种版本:
- JavaSE:standard edition,标准版
- JavaEE:enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序
- JavaME:micro edtion,主要用于移动设备、嵌u入式设备上的java应用程序
JDK安装目录下各个子文件目录和文档作用的详细介绍
- bin文件里面存放了JDK的各种开发工具的可执行文件,主要的是编译器(javac.exe)
- db文件是一个先进的全事务处理的基于Java技术的数据库(jdk自带数据库db的使用)
- include文件里面是Java和jvm交互用的头文件
- jre为java运行环境
- lib文件存放的是JDK工具命令的实际执行程序
▎JRE
JRE(Java runtime environment ):是运行基于Java语言编写的程序所不可缺少的运行环境,用于解释执行Java的字节码文件。
JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
JRE安装目录下各个子文件目录和文档作用的详细介绍
- bin文件里的就是JVM
- lib文件中则是JVM工作所需要的类库,而JVM和 lib和起来就称为JRE
从JDK11开始,JDK和JRE都是在一起的,安装后默认是没有JRE的。如果需要JRE这个单独目录,可以在JDK目录下面去打开命令窗口,然后执行如下命令(win10执行这个生成JRE需要目录权限):
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
▎JVM
JVM(Java Virtual Machine):是Java的虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。
作用:首先通过编译器把 Java 代码转换成字节码,类加载器把字节码加载到内存中,将其放在运行时数据区的方法区内,通过命令解析器执行引擎将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口来实现整个程序的功能。
▎Java跨平台的原因
使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。
JVM是Java程序跨平台的最核心的部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在多种平台上不加修改地运行。
正是因为有了JVM的存在,Java才实现了强大的跨平台特性。
▎jvm执行程序的过程
1、加载.class 文件
2、管理并分配内存
3、执行垃圾收集(调用垃圾收集器进行垃圾回收)