Open felix-cao opened 5 years ago
如何搭建 Java 开发环境 可以参考 《Java 开发环境的配置》,本文主要 聊一聊 JRE、JDK、JVM 三者之间的区别与联系及环境变量。
Java
JRE
JDK
JVM
JVM :英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心,具体的下文会详细说明。
xxx.class
class
API
jvm
JRE :英文名称(Java Runtime Environment),是 Java 程序的运行环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。
JDK :英文名称(Java Development Kit),是 Java 的开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。
jdk
jre
javac.exe
java.exe
jar.exe
这样看来,它们三者是有关系的,这是一种冗余的包含关系:JDK > JRE > JVM。
JDK > JRE > JVM
下图是官方1.8的文档说明:
运行时使用 jre 而不使用 jdk,一方面是为了减少硬盘空间的使用,另一方面也有一定的安全考虑,防止 jdk 里的一些执行命令被恶意篡改。当然,现在大部分公司运行时已经不那么区分 jdk 和 jre 了,直接在服务器上跑 JDK。
环境变量, Environment Variable。
首先,你把操作系统当做是一个最大的软件,其它软件如 Office、JVM、LOL 等等都是运行在这个软件之内的小软件。那么,相对于这些小软件来说,它们所处的 环境 就是操作系统这个软件。
Office
LOL
环境
环境变量 就是操作系统这个软件中的变量,即:操作系统提供给你的全局变量!
环境变量
安装 JDK 以后,因为需要配置 window 的系统环境变量 Path,所以我们需要来简单聊一聊这个话题。
window
Path
在 window 系统下,当执行用户命令时,若用户未给出绝对路径,系统搜索命令的路径的顺序是这样的:
PATH
所以 PATH 是操作系统用的,用来指定操作系统需要使用到的可执行程序的位置。对于 Java 来说,通常需要把 JDK 的 bin 目录添加进入 PATH 中,这样你就可以在任意目录下使用 bin 下面的可执行程序,如 javac.exe、java.exe等。
bin
JAVA_HOME 是一个约定,通常它指的是 JDK 的目录。如果需要 JDK 的话,大部分程序会默认去环境变量中取 JAVA_HOME 这个变量。
JAVA_HOME
CLASSPATH 是 javac 编译器的一个环境变量。它的作用与 import、package 关键字有关。当你写下 improt java.util.* 时,编译器面对 import 关键字时,就知道你要引入 java.util 这个 package 中的类;但是编译器如何知道你把这个 package 放在哪里了呢?所以你首先得告诉编译器这个 package 的所在位置;如何告诉它呢?就是设置 CLASSPATH 啦,
CLASSPATH
javac
import
package
improt java.util.*
java.util
CLASSPATH 环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM 就是通过 CLASSPATH 来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录.也必须加入到该变量中。这里CLASSPATH为:
lib
dt.jar
tools.jar
.
.;C:/Program Files/Java/jdk1.6.0_21/lib/dt.jar;C:/Program Files/Java/jdk1.6.0_21/lib/tools.jar
在 window 下,我们的 jdk 安装成功后,在 C:\Program Files\Java 目录下会是同时存在 jdk 和 jre 两个目录, 而在 jdk 目录下又存在一个子目录 jre,如下图示:
C:\Program Files\Java
不过最新的 JDK11 这个版本已经无需再安装 JRE,设置环境变量时也不用设置 CLASSPATH 了
JDK11
如何搭建
Java
开发环境 可以参考 《Java 开发环境的配置》,本文主要 聊一聊JRE
、JDK
、JVM
三者之间的区别与联系及环境变量。一、概念
JVM
:英文名称(Java Virtual Machine),就是我们耳熟能详的Java
虚拟机。它只认识xxx.class
这种类型的文件,它能够将class
文件中的字节码指令进行识别并调用操作系统向上的API
完成动作。所以说,jvm
是Java
能够跨平台的核心,具体的下文会详细说明。JRE
:英文名称(Java Runtime Environment),是Java
程序的运行环境。它主要包含两个部分,jvm
的标准实现和Java
的一些基本类库。它相对于jvm
来说,多出来的是一部分的Java
类库。JDK
:英文名称(Java Development Kit),是Java
的开发工具包。jdk
是整个Java
开发的核心,它集成了jre
和一些好用的小工具。例如:javac.exe
,java.exe
,jar.exe
等。这样看来,它们三者是有关系的,这是一种冗余的包含关系:
JDK > JRE > JVM
。下图是官方1.8的文档说明:
运行时使用
jre
而不使用jdk
,一方面是为了减少硬盘空间的使用,另一方面也有一定的安全考虑,防止jdk
里的一些执行命令被恶意篡改。当然,现在大部分公司运行时已经不那么区分jdk
和jre
了,直接在服务器上跑JDK
。二、系统环境变量
环境变量, Environment Variable。
首先,你把操作系统当做是一个最大的软件,其它软件如
Office
、JVM
、LOL
等等都是运行在这个软件之内的小软件。那么,相对于这些小软件来说,它们所处的环境
就是操作系统这个软件。环境变量
就是操作系统这个软件中的变量,即:操作系统提供给你的全局变量!2.1、window 的系统环境变量 Path
安装
JDK
以后,因为需要配置window
的系统环境变量Path
,所以我们需要来简单聊一聊这个话题。在
window
系统下,当执行用户命令时,若用户未给出绝对路径,系统搜索命令的路径的顺序是这样的:PATH
保存的这些路径中寻找相应的可执行的程序文件。系统就以第一次找到的为准;PATH
保存的所有路径都未找到,则会抛出错误。所以
PATH
是操作系统用的,用来指定操作系统需要使用到的可执行程序的位置。对于Java
来说,通常需要把JDK
的bin
目录添加进入PATH
中,这样你就可以在任意目录下使用bin
下面的可执行程序,如javac.exe
、java.exe
等。JAVA_HOME
是一个约定,通常它指的是JDK
的目录。如果需要JDK
的话,大部分程序会默认去环境变量中取JAVA_HOME
这个变量。CLASSPATH
是javac
编译器的一个环境变量。它的作用与import
、package
关键字有关。当你写下improt java.util.*
时,编译器面对import
关键字时,就知道你要引入java.util
这个package
中的类;但是编译器如何知道你把这个package
放在哪里了呢?所以你首先得告诉编译器这个package
的所在位置;如何告诉它呢?就是设置CLASSPATH
啦,CLASSPATH
环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM
就是通过CLASSPATH
来寻找类的。我们需要把jdk
安装目录下的lib
子目录中的dt.jar
和tools.jar
设置到CLASSPATH
中,当然,当前目录.
也必须加入到该变量中。这里CLASSPATH
为:三、为什么我们的电脑在装完 jdk 后会有 jre 文件夹
在
window
下,我们的jdk
安装成功后,在C:\Program Files\Java
目录下会是同时存在jdk
和jre
两个目录, 而在jdk
目录下又存在一个子目录jre
,如下图示:不过最新的
JDK11
这个版本已经无需再安装JRE
,设置环境变量时也不用设置CLASSPATH
了Reference