JDK JRE Java虚拟机的关系

安装JDK时一定会在其子目录下面安装一个JRE,同时在安装的过程也会询问你是否要安装一个外部的JRE。如果我们选择安装则就同时拥有了两个jre。这两个JRE其实本质上是没有任何分别的。最主要的区别在于:JDK目录里面的JRE主要是设计用来运行JDK自带的那些工具的(Bin目录下)。而外部的JRE在安装的时候会自动注册到操作系统的path里面一般是:System32文件夹下面。因此我们只要安装了外部的JRE则运行Java程序时都是用的外部JRE来运行的(系统的默认path具有优先)。

JVM只是JRE的一部分确切的说是JRE的一个动态链接库。
JDK里面的工具(Bin目录下的那些很小的.exe文件)几乎都是用Java编写的(都存放在JDK目录下面的lib文件夹中的tools.jar文件中),之所以是以.exe文件的形式出现是为了免于输入冗长的执行代码(java -classpath JDK_HOME\lib\tools.jar com.sun.tools.javac.Main)。此处的exe文件仅仅是一个包装器以方便用户的使用。很多软件最后都打包成exe文件就是一种包装器。因此这些包装器的运行其实最终都是去调用tools里面相应的Java字节码来运行因此都依赖于JRE所以在JDK内部才有一个JRE。
当我们电脑上安装了JBuilder等开发工具时它们都自带了自己的JDK,因此当我们运行Java程序的时候到底使用的哪一个JRE呢。这个是由java.exe文件来决定的。java.exe的作用就是找到相应的JRE来运行后面给出的.class文件。寻找逻辑如下:
首先在自己的目录下面查找JRE若没有找到,然后去父目录下查找,最后去Windows的注册表中(HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\)去找。而注册表中一般只有Client而没有Server虚拟机。所以输入
java -server时候会说找不到。当然找到JRE以后还有一个版本验证的过程,那就是验证java.exe和此JRE版本是否一致,假若我们运行的是jdk1.3版本的java.exe文件然后找到的是却是jdk1.4的jre程序就可能会出错。
我们在JRE/bin目录下面会看到有连个文件夹client和server。它们里面都会有一个jvm.dll文件这就是所谓的虚拟机。
在我们运行java.exe文件的时候我们要确定两个事情:
哪一个java.exe文件被执行,java.exe找到的是哪个JRE。
具体运行的是哪一个Java.exe主要取决于环境变量path的设置,对于Windows系统来说C:\Windows\System32是默认的。
因此我们再去添加指向我们安装的java.exe的环境变量时要注意与系统环境变量的先后关系。
path=D:\JDK_HOME\bin;C:\Windows\System32(优先运行JDK_HOME里面的java.exe)
和path=C:\Windows\System32;D:\JDK_HOME\bin;(优先运行系统目录下的java.exe文件)是不同的。因此当我们要想jre中(如ext目录)添加.jar文件时就要注意其匹配问题了。

转载于:https://www.cnblogs.com/52Test/p/7575778.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值