登录
原创

JDK、JRE、JVM的区别及工作原理

发布于 2020-10-16 阅读 92
  • Java
原创

注:此处安装的JDK版本为8

一、JDK、JRE、JVM的关系

JDK包含JRE,JRE包含JVM:

关系.jpg

到安装的JDK目录中可以看到,有jdk和jre两个文件夹

JDK安装目录.png

打开上图中的jre,目录里面是这样的:

单独JRE.png
进入jdk文件夹,发现里面也有jre:

JDK中JRE.png
打开此处jre文件夹,里面是这样:

JDK中JRE详情.png
发现jdk文件夹里面的jre和外面单独的jre里面内容看着一样。
如果去掉jdk目录下的jre,但是外面那个独立的jre在,可以正常编译和执行:

jdk里无jre外有独立的jre.png
如果有jdk下的jre,但是没有外面单独的jre:可以正常编译,但是执行java字节码文件时报错:

报错1.png
将独立的jre放回来后,执行成功:

执行正常.png

总结:
有jdk下的jre,没有外面独立的jre:可以正常编译,但是不能执行。
有外面独立的jre,没有jdk下的jre:可以正常编译和执行。
编译时,首先找jdk下的jre,没有的话,再找上层目录独立的jre,还没找到就回去注册表找,都没找到就不能编译。
执行时,依赖jdk外独立的jre,没有的话会报错,不能正常执行。

编译会使用javac.exe,它是用java写的,所以运行javac.exe需要jre,没有jre的话无法编译。其他像javadoc等java命令也都是java写的,它们的执行也需要jre。编译时,首先会找jdk下的jre,没有的话找外面独立的那个jre,还没找到的话会去注册表里面找jre。

注册表查看JRE方法:搜索框中输入“regedit”,找到 “HKEY_LOCAL_MACHINE”下—》“SOFTWARE”下—》“JavaSoft”—》“Java Runtime Environment”
这里的Java Runtime Environment就是JRE

注册表.png

注册表中jre.png

二、编译原理

dt.jar和tools.jar是两个java最基本的包,tools.jar是java中最核心的包,编译时的javac命令其实是通过javac.exe去调用tools.jar下的Mian类

java核心包.png
证明:更改tools.jar名称,然后编译,出现报错:

tool报错.png

tools.jar名称改回来后,重新编译,编译成功:

tool.png

三、运行原理

java.exe执行字节码文件时,其实是调用了JVM,JVM位置:jre目录下—》bin目录下—》server目录下—》jvm.dll程序,但jvm不能单独完成对字节码文件的解释,要加上jre目录下的lib库才可以,所以JRE = JVM + lib库

JVM.png

JRE2.png

评论区

零00
0粉丝

时光荏苒,我自清欢

0

0

0