简述java中JDK、JRE和JVM的之间的关系
初学java平台,很容易搞不清楚java中的一些概念。以下简述一下本人对JDK、JRE和JVM的之间的关系:
概念
JDK(Java Development Kit)简单理解就是Java开发工具包,是java的核心所在;JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机。JDK是面向开发者的,JRE是面向使用JAVA程序的用户,JVM是java实现跨平台和系统的媒介所在。上面只是一个概念上简单的区别,下面我用截图的方式来简述三者的关系。
层次图
通过上图可以看出JDK包含JRE,而JRE包含JVM。我们都知道一个java程序的执行过程如下:
编写java源代码(Eclipse/idea集成开发环境)à编译(jdk/bin/javac.exe)à字节码-à执行字节码文件(启动JVM)
JDK包含JRE
JDK包含JRE,是因为Java本身编译的源代码,也需要能够被编译执行,而要被编译就必须有JRE。通过上图可以看出JDK比JRE多了java编译与反编译语言(Java Language)和java工具包(Tools&Tool APIs)。另外从下图来看,JDK包里除了JRE这个包后还有bin文件里面都是java的可执行的编译器及其工具,如java,javadoc等;此外还有lib包(java自带的工具包)这刚好对应如上层次图中的编译语言(Java Language)和java工具包(Tools&Tool APIs)。
另外,JDK安装时一般会安装独立于JDK包之外的JRE,这个包和JDK自带的JRE内容上基本一致,两套JRE运行的时候究竟运行哪一个呢,这个时候JDK中java.exe先从自身目录中找,然后父级目录中找,如果都没有就去注册表中找。
JRE包含JVM
JRE包含JVM的原因是JVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行(计算机本身只能编译字节码文件)。
JVM又不能单独执行class文件,解释class的时候JVM需要调用解释所需要的类库lib。因此如上图所示Java把JVM放在了JRE里面,初次外JRE还包括java SE API。
总结
JDK包含JRE,而JRE包含JVM;JDK是用于java程序的开发,而JRE则是只能运行class而没有编译的功能,所编译的class文件都必须通过JVM去执行字节码文件。
另外,对于初学java基础薄弱的同学,推荐菜鸟教程https://www.runoob.com/java进行学习。