JRE 与 JDK的区别

1. 定义

JRE(Java Runtime Enviroment) 是 Java 的运行环境。面向 Java 程序的使用者,而不是开发者。如果你仅下载并安装了 JRE,那么你的系统只能运行 Java 程序。JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。

JDK(Java Development Kit) 又称 J2SDK(Java2 Software Development Kit),是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。如果你下载并安装了 JDK,那么你不仅可以开发 Java 程序,也同时拥有了运行 Java 程序的平台。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE),一堆 Java 工具 tools.jar 和 Java 标准类库 (rt.jar)。

2. 区别

JRE 主要包含:java 类库的 class 文件(都在 lib 目录下打包成了 jar)和虚拟机(jvm.dll);JDK 主要包含:java 类库的 class文件(都在 lib 目录下打包成了 jar)并自带一个 JRE。那么为什么 JDK 要自带一个 JRE 呢?而且 jdk/jre/bin 下的 client 和 server 两个文件夹下都包含 jvm.dll(说明 JDK 自带的 JRE 有两个虚拟机)。

记得在环境变量 path 中设置 jdk/bin 路径吗?老师会告诉大家不设置的话 javac 和 java 是用不了的。确实 jdk/bin 目录下包含了所有的命令。可是有没有人想过我们用的 java 命令并不是 jdk/bin 目录下的而是 jre/bin 目录下的呢?不信可以做一个实验,大家可以把 jdk/bin 目录下的 java.exe 剪切到别的地方再运行 java 程序,发现了什么?一切 OK!(JRE 中没有 javac 命令,原因很简单,它不是开发环境)那么有人会问了?我明明没有设置 jre/bin 目录到环境变量中啊?试想一下如果 java 为了提供给大多数人使用,他们是不需要 jdk 做开发的,只需要 jre 能让 java 程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?所以安装jre的时候安装程序自动帮你把 jre 的 java.exe 添加到了系统变量中,验证的方法很简单,去 Windows/system32 下面去看看吧,发现了什么?有一个 java.exe。

3. 难点

如果安装了 JDK,会发现你的电脑有两套 JRE,一套位于 C:Program FilesJavajre6, 另外一套位于 C:Program FilesJavajdk1.6.0_41jre 目录下。

JRE 的地位就象一台 PC 机一样,我们写好的 Win32 应用程序需要操作系统帮我们运行,同样的,我们编写的 Java 程序也必须要 JRE 才能运行。所以当你装完 JDK 后,如果分别在硬盘上的两个不同地方安装了两套 JRE,那么你可以想象你的电脑有两台虚拟的 Java PC 机,都具有运行 Java 程序的功能。所以我们可以说,只要你的电脑安装了 JRE,就可以正确运行 Java 应用程序。

1、为什么Sun要让JDK安装两套相同的JRE?

这是因为 JDK 里面有很多用 Java 所编写的开发工具,如 javac.exe、jar.exe 等,这些命令放置在 C:Program FilesJavajdk1.6.0_41bin 目录里。

因为他们是 java 编写的命令,所以要依靠 java 的 jar 包,这些 jar 包存放在 C:Program FilesJavajdk1.6.0_41lib 目录里。

如果将 C:Program FilesJavajdk1.6.0_41lib 目录里面的 tools.jar 改名为 tools1.jar,然后运行 javac.exe,显示如下结果:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 

但是输入:

java -cp C:Program FilesJavajdk1.6.0_41libtools1.jar com.sun.tools.javac.Mainx

会得到与 javac.exe 相同的结果。

从这里我们可以证明 javac.exe 只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。

而且我们可以发现 C:Program FilesJavajdk1.6.0_41bin 目录下的程序都很小,不大于 29K,从这里我们可以得出一个结论。就是 JDK 里的工具几乎是用 Java 所编写,所以也是 Java 应用程序,因此要使用 JDK 所附的工具来开发 Java 程序,也必须要自行附一套 JRE 才行,所以位于C:Program FilesJavajdk1.6.0_41jre 目录下的那套 JRE 就是用来运行一般 Java 程序用的。

2、如果一台电脑安装两套以上的 JRE,谁来决定呢?

这个重大任务就落在 java.exe 身上。java.exe 的工作就是找到合适的 JRE 来运行 Java 程序。 java.exe 依照底下的顺序来查找 JRE:自己的目录下有没有 JRE;父目录有没有 JRE;查询注册表:

[HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment] 

所以 java.exe 的运行结果与你的电脑里面哪个 JRE 被执行有很大的关系。

文章出处:http://swiftlet.net/archives/639

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
  1. 免费下载或者VIP会员资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
  2. 提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。
  3. 找不到素材资源介绍文章里的示例图片?
    对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
  4. 付款后无法显示下载地址或者无法查看内容?
    如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理
  5. 购买该资源后,可以退款吗?
    源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源

评论(0)

提示:请文明发言