博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK JRE Java虚拟机的关系
阅读量:5049 次
发布时间:2019-06-12

本文共 1428 字,大约阅读时间需要 4 分钟。

安装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

你可能感兴趣的文章
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
【BZOJ4487】[JSOI2015] 染色问题(高维容斥)
查看>>
Ubuntu 环境变量
查看>>
一步一步学MySQL-日志文件
查看>>
bzoj3994: [SDOI2015]约数个数和
查看>>
hdu5306 Gorgeous Sequence
查看>>
Android中使用ListView实现下拉刷新和上拉加载功能
查看>>
proc文件系统的简介
查看>>
连续自然数和
查看>>
[SDOI2015]星际战争
查看>>
用好lua+unity,让性能飞起来——luajit集成篇/平台相关篇
查看>>
JS控制页面跳转
查看>>
Ubuntu PPA软件源
查看>>
Window 2003 IIS + MySQL + PHP + Zend 环境配置
查看>>
Mysql集合笔记
查看>>
HTTPS与SSL数字证书的必要性
查看>>
react之项目目录
查看>>
wamp自定义网站根目录及多站点配置
查看>>
GPT转MBR完整图文教程
查看>>