搞懂JDK和JRE:有何不同?
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 Files\Java\jre6, 另外一套位于 C:\Program Files\Java\jdk1.6.0_41\jre 目录下。
JRE 的地位就象一台 PC 机一样,我们写好的 Win32 应用程序需要操作系统帮我们运行,同样的,我们编写的 Java 程序也必须要 JRE 才能运行。所以当你装完 JDK 后,如果分别在硬盘上的两个不同地方安装了两套 JRE,那么你可以想象你的电脑有两台虚拟的 Java PC 机,都具有运行 Java 程序的功能。所以我们可以说,只要你的电脑安装了 JRE,就可以正确运行 Java 应用程序。
1、为什么Sun要让JDK安装两套相同的JRE?
这是因为 JDK 里面有很多用 Java 所编写的开发工具,如 javac.exe、jar.exe 等,这些命令放置在 C:\Program Files\Java\jdk1.6.0_41\bin 目录里。
因为他们是 java 编写的命令,所以要依靠 java 的 jar 包,这些 jar 包存放在 C:\Program Files\Java\jdk1.6.0_41\lib 目录里。
如果将 C:\Program Files\Java\jdk1.6.0_41\lib\ 目录里面的 tools.jar 改名为 tools1.jar,然后运行 javac.exe,显示如下结果:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main
但是输入:
java -cp C:\Program Files\Java\jdk1.6.0_41\lib\tools1.jar com.sun.tools.javac.Mainx
会得到与 javac.exe 相同的结果。
从这里我们可以证明 javac.exe 只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。
而且我们可以发现 C:\Program Files\Java\jdk1.6.0_41\bin 目录下的程序都很小,不大于 29K,从这里我们可以得出一个结论。就是 JDK 里的工具几乎是用 Java 所编写,所以也是 Java 应用程序,因此要使用 JDK 所附的工具来开发 Java 程序,也必须要自行附一套 JRE 才行,所以位于C:\Program Files\Java\jdk1.6.0_41\jre 目录下的那套 JRE 就是用来运行一般 Java 程序用的。
2、如果一台电脑安装两套以上的 JRE,谁来决定呢?
这个重大任务就落在 java.exe 身上。java.exe 的工作就是找到合适的 JRE 来运行 Java 程序。 java.exe 依照底下的顺序来查找 JRE:自己的目录下有没有 JRE;父目录有没有 JRE;查询注册表:
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
所以 java.exe 的运行结果与你的电脑里面哪个 JRE 被执行有很大的关系。
文章出处:http://swiftlet.net/archives/639
推荐阅读
-
JDK、JRE 和 JVM 之间有什么关系?
-
3分钟搞懂MD5加密后的16位和32位有何不同
-
搞懂JDK和JRE:有何不同?
-
未曾有因缘经-尔时波斯匿王。国大夫人。出入行来。常使四人。名扇提罗(扇提罗者汉言石女无男女根故名石女)。最大筋力。令此四人。担皇后舆。皇后所乘。七宝辇舆。留在祇洹精舍门外。敕诸黄门。令守护之。黄门转令四扇提罗。守夫人舆。其身自往佛边听法。扇提罗等。各于舆下。睡眠不识。时有凶人。偷取夫人珍宝辇舆一摩尼珠。尔时黄门。暂出看舆。不见宝珠。心中惶怖。惧夫人责。问石女言。使汝守舆。何故偷珠各各答言。实不偷也。黄门大怒。鞭打石女。苦痛彻骨。时有一石女。自审不偷横受楚毒。奔走逃突入精舍中。称怨大唤众皆闻之莫知所由。 波斯匿王和皇后出宫的时候经常用四名力气很大的石女抬轿。皇后所乘的轿子有七宝装饰。这一次被留在世尊精舍的门外,让太监看守。太监就转命四名石女守着轿子,自己跟随听佛讲法。这四名石女睡着了,有人偷了轿于上的一颗摩尼宝珠,她们也不失道。这时太监不放心,出来察看。发现轿子上的宝珠没有了,心中十分害怕皇后斥责,便问石女说:让你们看护轿于,你们怎么监守自盗偷宝珠呢?这些石女都说:不是她们偷的。太监发了脾气,用鞭子抽打石女,痛彻骨隋。其中有一名石女觉得自己没有偷窃宝珠而被鞭打,便逃入世尊讲法精舍,大声喊冤。大家听了都不知道发生了什么事情。 佛语阿难。汝可出往彼黄门所。无令横鞭无过之人。何以故。此四石女者。乃是皇后前世之师。自无过罪。何以横鞭。自造后世恶业因缘。是时皇后。闻佛此语。即起恭敬。合掌白佛。如世尊说。四担舆石女。乃是皇后前世时师。迷意不解。惟愿世尊。说其因缘。令诸会众普得闻知。佛告皇后。唤石女来。于世尊前。验其虚实。皇后奉命。即遣黄门。摄之将来。时四石女。见佛叩头啼哭。长跪合掌。白世尊曰。实不偷珠。有何因缘。横罗此罪。鞭打楚痛。身体破坏。世尊告言。罪业因缘。自身所造。非父母为。非从天堕。人行善恶。受苦乐报。如响应声。贪现前利。心行邪谄。不知后世累劫受殃。夫恶从心生。反以自贼。如铁生垢。消毁其形。王叉手白佛。前后说法。皆有因缘。令四石女。先世本业有何因缘愿佛为说。开悟盲冥多所利益。众人蒙祐。 佛对阿难说:你去到太监那里让他不要鞭打没有过错的人,这四名石女是皇后前生的老师,没有犯什么错,为什么要鞭打她们呢?这会造作后世的恶业因缘。皇后听到佛说这话,于是恭敬起立,合掌问佛:世尊所说这四名抬轿石女是我前世的老师,我十分迷惑,请您说说其中因缘由来,让大家都能明了知晓。佛告诉皇后:你召唤石女进来,在我面前可以验证虚实。皇后就命令太监把四名石女传来。四名石女见佛后,叩头啼哭,顶礼世尊说:实在不是我们偷了宝珠,因为什么缘故而遭此痛苦,鞭打加身呢?世尊说道:罪业的因缘是自己所造,并不是父母所为,更不是从天而降。人们造作善恶之事,就会有苦乐报应,就如同喊话回声一样如影随形。为了贪得现前的利益而做奸邪欺骗的事情,却不知后世多生多劫会遭受苦报。恶从心生,却是自己的敌人,如同铁器生锈,腐蚀其形。波斯匿王向佛致礼问道:世间的事情都有前后因缘,这四名石女前生有什么因缘请佛说一说,开导我们这些无知之人,利益大众。 佛告王曰。欲闻者善。着心谛听。吾今说之。佛复惟曰。今我法中。有诸比丘。言行不同。心口相违。或为利养钱财饮食。或为名誉要集眷属。或有厌恶。王法役使出家为道。都无有心向三脱门。度三有苦。以不净心。贪受信施。不知后世。弥劫受殃。偿其宿债。为是等故。岂得不说。
-
如何选择阿里云建站云企业官网的不同版本:标准版、高级版和尊贵版有何功能区别?- 云企业官网的高级版和标准版有何区别?