JDK、JRE、JVM三者之间的关系和区别

      前天下班回家看见室友在看虚拟机相关的书,于是随口问问,“大神,JVM都被你研究爆了吧,那JDK、JRE、JVM它们三者的关系是怎样的呢?”那刻空气突然安静,室友回答说,“额。。。。。。这个还真不知道,安装JDK时自带JRE,不需要另外装JRE了就这些”,于是我自己偷偷来温习整理下,说实话,搞了这么多年开发,还真没好好弄明白这些,平常只顾着业务开发而忽略了这些基础知识,“万丈高楼平地起,一步一个脚印”,一起加油吧,兄dei!

    字不如表,表不如图。先上一张图,

JDK、JRE、JVM三者之间的关系和区别_第1张图片

图1 金字塔图

 

金字塔结构:运行Java程序一般都要求用户的电脑安装JRE环境;没有JREjava程序无法运行;而没有java程序,JRE也就没有用武之地。

三者的各自定义如下:

1.JDKJava Development KitJava开发工具包

JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹binlib,在这里可以认为bin里的就是jvmlib中则是jvm工作所需要的类库,而jvm lib和起来就称为jre

  JDK是整个JAVA的核心,包括了Java运行环境JREJava Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

2.JREJava Runtime Environment  Java运行环境

运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。JRE中包含了Java virtual machineJVM),runtime class librariesJava application launcher,这些是运行Java程序的必要组件。

  与大家熟知的JDK不同,JREJava运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。

 

3.JVMjava virtual machineJava虚拟机

就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。

  也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。只有JVM还不能执行class,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

 

区别:

JDKJRE区别:

bin文件夹下你会发现,JDKjavac.exeJRE里面没有,众所周知javac指令是用来将java文件编译成class文件的,这是你开发去做的事,用户是不会去做的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。

JREJVM区别:

有些人觉得,JVM就可以执行.class文件了,其实不然,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jarrt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包(解压出来看一下),用eclipse开发时,当你ctrl点击发现不能跳转到源文件时,需要把rt.jar对应的源码包加进来,而这里的源码包正是jdk文件夹下的src.zip

JDK、JRE、JVM三者之间的关系和区别_第2张图片

图2 三者关系图

你可能感兴趣的:(Java知识)