美文网首页
JDK、JRE、JVM的区别及工作原理

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

作者: 零00_ | 来源:发表于2020-10-16 11:34 被阅读0次

    注:此处安装的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,没有的话会报错,不能正常执行。
    jdk下的jre主要用于运行java命令。

    编译会使用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

    相关文章

      网友评论

          本文标题:JDK、JRE、JVM的区别及工作原理

          本文链接:https://www.haomeiwen.com/subject/qzuwpktx.html