JDK、JRE、JVM三者的区别与联系

JDK、JRE、JVM三者的区别与联系

今天看博客的时候看到看到一个问题,问的就是JDK、JRE、JVM的区别。我一想,我凑,学了Java我居然不知道,可耻可耻太可耻了。

叮,然后就有了这篇博客。

直接来说,就是JDK>JRE>JVM

JDK、JRE、JVM三者的区别与联系_第1张图片

JDK是开发环境,JRE是运行环境,JVM是Java虚拟机。

1.JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
基本结构为JDK=JRE+JVM+其他,用户电脑需要安装JRE环境才能运行java程序。
现如今JDK有三个版本:
①、SE(J2SE),standard edition,标准版,是我们通常用的一个版本。
②、EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序。
③、ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序。

2.JRE

JRE是Java语言程序的运行环境,正是通过它,Java开发者才得以将自己开发的程序发布到用户手中,让用户使用。
JRE(包括Java Plug-in),它包括Java虚拟机(JVM)、Java核心类库和支持文件。它不包含开发工具(JDK)–编译器、调试器和其它工具。JRE需要辅助软件–Java Plug-in–以便在浏览器中运行applet。
与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。

3.JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
也就是说class类文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
只有JVM还不能让class执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

总得说就是,我们利用JDK开发来Java程序,通过JDK中的编译程序将Java文件便以为Java字节码,在JRE上运行这些Java字节码,JVM解释这些字节码,映射到CPU指令集或者OS的系统调用。

4.为什么有两个JRE?

我们平时开发Java程序都会安装JDK和JRE,不过JDK文件里也会有一个JRE文件。
JDK里面的JRE:…\Java\jdk1.8.0_51\jre
JDK外面的JRE:…\Java\jre1.8.0_51
相同点:这两个JRE都可以作为开发Java程序的运行环境。
不同点:JDK自带的开发工具只能使用JDK自己目录下的JRE(JDK里面的JRE是JDK自带的为其开发工具提供运行环境的JRE),不能使用JDK外面的JRE。

你可能感兴趣的:(java)