论坛首页 入门技术论坛

private JRE与public JRE

浏览 4177 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-03-12  

 

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所在的位置的呢?这主要通过注册表。

 

注册表信息:

 

 

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



 

 

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



 

 

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

 

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

 

  • 大小: 5.6 KB
  • 大小: 7.2 KB
  • 大小: 11.4 KB
   发表时间:2010-03-22  
JDK和JRE?
0 请登录后投票
   发表时间:2010-11-17  
如果一台机器上没有安装JRE,可以把我本机上的JRE复制到目录机器上,并通过BAT文件写一下环境变量,是否可以设置好JRE,这样在windows/system32是否就不需要那些*java*文件了呢?
0 请登录后投票
   发表时间:2010-11-27  
我安装jdk的时候,环境变量都设置好了,直接复制的,不是安装版本,但是安装基于java软件的时候,提示找不到jdk,不知道这些软件是怎么找jdk的,注册表吗?我的系统环境变量已经配置好了也没有用。
0 请登录后投票
   发表时间:2010-11-29  
我是用公共jre的,装上去也没啥问题
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics