JDK = Java Development Kit 开发套件

JRE = java runtime environment 运行环境,里面包含了jvm虚拟机以及各种运行库


安装jdk完了之后又会弹出选择让我们安装jre,比如安装了jdk6之后又会安装一个jre6,安装完毕后配置环境,运行java程序成功。


但是我在jdk6目录下面也找到了一个jre的目录,点进去看,和java目录下的jre6基本是一样的,为什么sun要让我们在一台机器上装两个jre呢,而且看起来好像是一样的程序。


然后上网搜一下,得到答案:

JDK中大部分程序都是用java写的,他们的运行本身就是需要java运行环境的,所以说,要运行jdk必须要有jre,故jdk中的jre不难理解了。而且,jdk中的jre和jre6目录中的运行环境基本相同,都能拿来运行java程序。那执行java.exe操作之后,到底是用了系统中的哪一个jre呢,按照网上的说法:

既然您的電腦裡頭至少有兩套 JRE ,那麼誰來決定用哪一套 JRE 呢 ? 這個重

責大任就落在 java.exe 的身上。

當我們在命令列輸入

java XXX

的時候, java.exe 的工作就是找到合適的 JRE 來執行類 別 檔。 java.exe 依照底

下邏輯來尋找 JRE:

1. 自己的目錄下有 沒 有 JRE 目錄。 ( 這個部分這樣 說 並不是非常精確,原因

請詳見 JDK 原始碼,這此不特 別說 明 )

2. 父目錄底下 JRE 子目錄。(我测试了一下运行ava程序没有优先搜索它,疑惑)

3. 查詢 Windows

Registry( HKEY_LOCAL_MACHINE\Software\JavaSoft\Java

Runtime Environment\ ) 。

所以, java.exe 的執行結果和您電腦裡面哪一個 java.exe 被執行,然後哪一

套 JRE 被拿來執行 Java 應用程式有莫大的關係。

按这样说,只要安装了jdk,每次运行java用的都是jdk中jre里面的运行环境了,但是我把jre6目录重命名之后运行java程序,报错,找不到jre6目录,

这就说明这个优先次序不对,于是我找到注册表项

HKEY_LOCAL_MACHINE\Software\JavaSoft\JavaRuntime Environment\ 

目录下的这几个值是确定的关键:


也就说,javahome项确定了java运行用jre的目录,于是我把这个值改成jdk目录下的jre目录,下面的runtimelib相应修改,

然后将jre6文件夹改名,再次运行java程序,正常运行。

这样就可以确定,运行一般java程序时,如果目录下没有jre文件夹,就是查找这个注册表项去决定需要的jre


至于sun为什么要给你安装多个jre,我觉得是为了各自分担任务,jdk就使用自己目录下的jre,而一般java程序就用jre6目录下的运行环境,这样互不干扰,能减轻各自jvm的负担,更加稳定。









Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐