我们都知道需要开发Java程序,首先得需要配置java的开发环境即 JDK。今天我们来看下JDK、JRE、JVM三者之间的关系。
首先介绍下这三者的含义:
JDK:Java Development Kit (Java 开发工具)
JRE:Java Runtime Envirnment (Java 运行环境)
JVM : Java Virtual Machine (Java 虚拟机)
当我们把 JDK 安装好之后,打开 JDK 的目录,可以看到:
里面可以看到有一个 jre 的目录,没错,这就是我们所需要的 jre,从这里可以看出 JDK 包含了 JRE。
我们还可以看到有一个 bin 目录,这是个什么目录呢?我们都知道我们所写好的 .java文件是需要编译成 .class文件(即字节码文件),通过 javac 命令,然后才能运行的。那么这个 bin 目录中就含有 javac 的脚本执行文件(即编译的命令)。
我们来看看 bin 中是不是真有呢?
介绍到这里,那么不是还有一个 JVM 去哪里了呢,它又是干什么的呢?
我们来看看 jre 的目录结构吧:
可以看到那里面也有一个 bin 目录和 lib 目录。
那么这是干什么的呢?先来看看 bin 目录
这里面有一个 java.exe 可执行文件,上面也说了 jdk 中 bin 目录中完成了对 .java 文件的编译工作。那么运行呢,我们知道,java 程序运行是要靠 jvm 的,并且可以通过终端中 java 命令来运行。所以呢,jre 中 bin 目录就是 jvm,jre 中 lib 目录就是 jvm 工作所需要的类库。
从这里我们可以知道 jre 包含了 jvm。
那么 jvm 又是什么呢?
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,
是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。
JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
这里介绍下java程序为什么“一次编译,到处运行”?
我们知道,Java语言的一个非常重要的特点就是与平台的无关性。
而使用Java虚拟机是实现这一特点的关键。
一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。
而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。
Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),
就可以在多种平台上不加修改地运行。
Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
这就是Java的能够“一次编译,到处运行”的原因。
补充:
java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:
①SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
②EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
③ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
总结:
1.JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品。JDK中包含JRE。开发人员开发java程序需要配置JDK。
JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
2.JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。
是运行基于Java语言编写的程序所不可缺少的运行环境。Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用,用户只需要安装jre就能够运行程序。