JDK,JRE与JVM
JDK
定义: JDK,全称Java Development Kit,(又称为Java SDK,Java Software Development Kit) ,是 Java 语言的软件开发工具包。
其中, JDK中包含JRE(Java Runtime Environment)和Java开发工具包,JRE又包含jvm虚拟机和Java运行所需的核心类库。
根目录下有个bin文件夹,这里面放的都是Java的可执行文件(也可以理解为Java开发工具,可执行文件就是利用这个文件可以对写出来的代码进行一些操作,比如javac是用来编译的,这个javac就是其中的一个可执行文件).
还是这一级目录,有个lib文件夹,这个文件夹的作用就是对bin目录下的开发工具起支持作用的,说白了就相当于一个环境,在这个环境的支持下,bin目录下的开发工具才能起作用。
还有个jre文件夹,这个就是上面所所的JRE(Java Runtime Environment Java运行环境),此目录下有个bin文件夹,这里面放的是java运行的必要组件(就是传说中的jvm),同一级目录下有个还有lib文件夹(注意,这里的lib文件夹,和根目录下的lib文件夹作用是不同的),这里的lib是对jvm进行支持的,也可以认为是一个环境,有了这个环境,jvm才能运行起来。
总的来说,只要是用JDK开发的程序,就必须在JRE上运行。
JRE
定义(简介):JRE 是Java Runtime Enviroment的简称,即Java 运行时环境,它是Java程序运行所必须的环境集合,主要由Java虚拟机、Java平台核心类和若干支持文件组成。JRE不包含开发工具、编译器、调试器以及其他工具。J2RE是Java2 Runtime Environment的简称,有时简称为JRE
JRE 自带的基础类库主要在 JRE\lib\rt.jar 文件中,该文件包括了 Java 2 平台标准版的所有类库,与JRE的版本是一致的。在程序运行时,JRE由ClassLoader(类加载器)负责查找和加载程序引用到的基类库和其他类库。基础类库,ClassLoader 会自动到 rt.jar 中加载,操作系统通过PATH 环境变量来查找 JRE 并确定基础类库文件 rt.jar 的位置;其他的类库,ClassLoader在环境变量CLASSPATH指定的路径中搜索,按照先来先到的原则,放在CLASSPATH前面的类库优先被搜到,因此建议在Java程序启动之前先把PATH和CLASSPATH环境变量设置好。
JVM
定义(简介):JVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JAVA语言的一个重要特点就是平台无关性,而java虚拟机(即jvm)可以来实现这样的特点
Java语言 编译程序只需生成在Java虚拟机上运行的目标代码( 字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的 机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
三者的区别与联系:
- JDK(Java Development Kit):
- 它是Java开发工具包,包含了编写Java程序所需的所有工具和库。
- JDK是面向开发者的,它不仅包含了JRE,还包括了编译Java代码的编译器(javac),运行Java程序的工具(java),以及用于开发Java应用程序的各种工具和库。
- JDK是开发Java应用程序的基础。
- JRE(Java Runtime Environment):
- 它是Java运行时环境,包含了运行Java应用程序所需的全部Java核心类库和Java虚拟机(JVM)。
- JRE是面向最终用户的,它允许用户运行Java应用程序,但不支持Java程序的开发。
- 简单来说,如果你只需要运行Java程序,而不需要开发,那么只需要安装JRE。
- JVM(Java Virtual Machine):
- 它是Java虚拟机,是一个可以执行Java字节码的虚拟计算机。
- JVM是Java平台的核心,它提供了一种机制,使得Java字节码可以在任何安装了JVM的平台上运行,实现了所谓的“一次编写,到处运行”(Write Once, Run Anywhere)。
- JVM负责加载Java类文件,执行字节码,并提供必要的运行时服务,如内存管理。
联系:
- JDK包含了JRE,因此安装了JDK的用户不需要单独安装JRE,因为JDK中已经包含了JRE的所有组件。
- JRE包含了JVM,因此JRE提供了运行Java程序所需的最小环境。
区别:
- JDK是为开发者设计的,包含了编写和编译Java程序所需的工具。
- JRE是为最终用户设计的,只包含运行Java程序所需的组件。
- JVM是Java程序运行的平台,与是否开发或运行Java程序无关,它是Java语言跨平台特性的关键。