private JRE与public JRE

 

l           private JRE

jdk1.6.0_18目录下面有一个子目录jre,这就是private JRE所在的目录。所谓私有JRE,即JDK中的工具包需要用到的JRE。这个jre目录名称是固定的,不能更改。为什么JDK中的工具包需要用到JRE呢?比如javac.exe,这是JDK工具包中的编译器,用来将JAVA源文件编译为.class文件,这个编译器实际上是用Java语言编写的,它的主要执行类位于Program Files\Java\jdk1.6.0_18\lib\tools.jar下面,这时候javac.exe就会使用私有JRE来运行tools.jar这个包里面编译器类,来对JAVA源文件进行编译。实际上,在JDK安装目录下面的bin目录中的大部分.exe文件,都仅仅只是一个外壳(包装器)而已。

l           public JRE

公共JRE在安装过程中可以选择为别的位置。它包括各种浏览器的插件,以便于能够在浏览器中执行JAVA小应用程序(Applet)。公共JRE在安装过程中,会把一部分动态链接库(DLL文件)和java.exe拷贝到c:/windows/system32目录下面。此目的是为了方便客户在安装完JRE之后,无需改动PATH环境变量(搜索路径)即可运行JAVA程序。那么,如果我们在安装完JRE之后(无论是单独安装JRE,还是在安装JDK的同时选择安装公共JRE都是一样的),不作任何环境变量的配置,直接打开控制台,运行java命令,会如何呢?控制台将会执行在c:/windows/system32目录下的java.exe外壳程序,它将会找到公共JRE中的jvm.dll(这才是真正的JAVA虚拟机)以及其它需要的动态链接库,运行Java虚拟机,Java虚拟机会自动加载公共JRE下面的一个rt.jar包,它是Java核心类库所在。

c:/windows/system32/目录下的java.exe程序是如何得知公共JRE所在的位置的呢?这主要通过注册表。

 

注册表信息:

 
private JRE与public JRE_第1张图片
 

点开Java Development Kit下面的1.6,可以看到有JavaHome的定义(指向jdk1.6.0_18目录):


private JRE与public JRE_第2张图片
 

 

点开Java Runtim Environment下面的1.6可以看到JavaHome(指向了jre6目录)


private JRE与public JRE_第3张图片
 

 

由上可知,java.exe通过注册表(通过CurrentVersion得到当前版本号,通过版本号找到JavaHome)找到了公共JRE所在,也就找到了JAVA虚拟机的所在。

 

所以,我们首先要搞清楚哪个java.exe被执行了,其次要搞清楚java.exe找到了哪个JRE!这两件事情弄清楚了,很多其它的问题,也就有答案了。

 

你可能感兴趣的:(Java)