JDK、JRE、JVM三者间的联系与区别
JDK、JRE、JVM三者间的联系与区别
作为具有多年经验的老程序员,大家都知道Java程序是运行在JVM(Java虚拟机)上的,而开始前都会去搭建Java环境,主要的就是JDK的安装和配置。那么JDK、JRE和JVM之间又有什么样的联系呢?区别又是什么?下面将详细的做介绍。
1、JDK
JDK (Java Development Kit),是Java开发工具包,是sun公司针对Java开发员的产品,是Java的核心,它提供了各种工具和资源,包括Java编译器、运行环境JRE,以及Java的基础类库。
下图是JDK的目录结构:
- bin:最主要的是编译器(javac.exe)、运行工具(java.exe)
- db:jdk从1.6之后内置了Derby数据库,它是是一个纯用Java实现的内存数据库,属于Apache的一个开源项目。(只做了解)
- include:Java和JVM交互用的头文件
- jre:Java运行环境
- lib:类库(jdk工具的一些补充jar包)
注意:这里的bin和lib跟jre中的bin和lib是不一样的。
2、JRE
JRE(Java Runtime Environment),是Java程序运行时环境,包含了JVM、runtime class libraries和Java application launcher等运行Java程序的必要组件。
与JDK不同,JRE是运行环境,并不像JDK一样是开发环境,所以并不包含任何开发工具(例如编译器、调试器)。
下图是JRE的目录结构:
- bin:就是JVM
- lib:JVM工作所需要的类库
3、JVM
JVM(Java virtual machine),也叫Java虚拟机,它是Java实现跨平台的最核心的部分。
所有的Java程序会首先被编译为.class可执行的字节码文件,该文件可以在Java虚拟机上执行,再由Java虚拟机间接与不同操作系统进行交互,虚拟机将程序解释给系统执行。
光有JVM并不能完成.class的执行,解释class的时候JVM需要调用解释所需要的类库lib。
在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
联系和区别:
- JDK是面向开发者的,是开发环境,JRE是面向使用JAVA程序的用户,是运行环境
- JDk包含 JRE,JRE包含 JVM
- JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
可以使用下面一幅图来总结:
参考博客:
https://www.cnblogs.com/bingyimeiling/p/10266949.html
https://www.cnblogs.com/iskandar/p/8933340.html