JDK、JRE、JVM三者间的联系与区别及环境变量的配置

有Java编程经验的程序员应该都知道:Java程序是运行在JVM(Java虚拟机)上的,在开发程序之前都要配置Java开发环境,其中首先要做的就是JDK的安装和配置,那么JDK、JVM、JRE到底有何联系和区别呢?想必并不是每一个程序员都能说得清楚的,本文接下来将带你了解它们之间的关系。
JDK、JRE、JVM三者间的联系与区别及环境变量的配置

一、JDK

  • JDK(Java SE DevelopmentKit),Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。
  • 下图是JDK的安装目录:
      JDK、JRE、JVM三者间的联系与区别及环境变量的配置

二、JRE

  • JRE( Java Runtime Environment) 、Java运行环境,用于解释执行Java的字节码文件。普通用户而只需要安装JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。
  • 下图是JRE的安装目录:里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。
    JDK、JRE、JVM三者间的联系与区别及环境变量的配置

三、JVM

  • JVM(Java VirtualMechinal),Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
  • 当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。JVM是Java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。

四、区别与联系

  • JDK 用于开发,JRE 用于运行java程序 ;如果只是运行Java程序,可以只安装JRE,无需安装JDK。
  • JDk包含JRE,JDK 和 JRE 中都包含 JVM。
  • JVM 是 java 编程语言的核心并且具有平*立性。

五、环境变量

  • path(环境变量):

    • path 是 dos以前的内部命令,windows继续沿用至今。用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找。
    • 环境变量可以简单的理解为路径导向。例如:Windows里面的临时文件夹存放的路径导向。当要访问此类文件时可根据此环境变量找到它的存放目录。像下面讲的在我们输入Java命令如javac等的时候不用敲入它的路径,系统自动根据环境变量设置找到其实际地址。
  • java程序的执行过程?

    • Java程序的运行是先将xxx.java文件(使用 javac 编译指令(jdk的bin目录下))编译成xxx.class文件(字节码文件),在将字节码文件(使用 java 执行指令(jre的bin目录下))解释成电脑所能认识的机器指令并运行的。
  • 为什么要配置环境变量?

    • 配置PATH环境变量(必需):
      • 前面讲到了 Java 程序的运行首先需要使用 javac 编译指令 编译成字节码文件, 继而使用 java 执行指令解释并运行字节码文件,而 window 运行 java 编译命令 javac 或者执行指令 java的时候,本地查找不到某个命令或文件,就会到path中去查找。那这个 javac 我们知道是存在 JDK 目录下面的 bin目录中的,因为我们不可能在每个 java 文件所在目录放置 JDK ,故把 JDK 放置 path 环境变量中,这样每个 java文件都可以通过 path 中设定的jdk目录找到编译命令进行编译。
    • 配置CLASSPATH环境变量(必需):
      • 在java开发过程中我们会用到很多开发人员已经帮我们写好的标准类库,而我们要用这些类库的话必须告诉计算机如何找到它们,CLASSPATH环境变量的作用就是指定类搜索路径,JVM就是通过CLASSPTH来寻找类的,设置CLASSPATH环境变量即可使计算机找到它们。
    • 配置JAVA_HOME环境变量(不必需):
      • JDK 是我们进行 java 开发必不可少的,在开发过程中我们通常会使用一些java开发过程中用到的软件(如eclipse、tomcat等)是通过JAVA_HOME来找到 JDK 的(环境变量JAVA_HOME的值就是 JDK安装的路径),所以我们不配置JAVA_HOME的话那我们使用eclipse时可能要受到影响。