`
answerhuang3
  • 浏览: 10009 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

JRE与JDK的区别

 
阅读更多

       在知乎上看到有人提问JRE和JDK的区别,然后这位朋友被人喷了,然后在下也有点心虚了,基础还是很重要的,在网上找到一篇个人认为写得很不错的文章,保存下来,慢慢回味。

       原文地址:http://swiftlet.net/archives/639,感谢这篇文章的作者。

      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应用程序。 
      ① 为什么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.Main 会得到与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程序用的。 
       ② 如果一台电脑安装两套以上的JRE,谁来决定呢?
       这个重大任务就落在java.exe身上。java.exe的工作就是找到合适的JRE来运行Java程序。 java.exe依照底下的顺序来查找JRE:自己的目录下有没有JRE;父目录有没有JRE;查询注册表:
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 
所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。

分享到:
评论

相关推荐

    jdk与jre的区别

    JDK 与 JRE 的区别 JDK(Java Development Kit)和 JRE(Java Runtime Environment)是 Java 语言的两个核心组件,它们之间存在着一定的关系和区别。下面我们将详细介绍 JDK 和 JRE 的概念、区别和关系。 JDK JDK...

    Java Portable 1.8.0.181 绿色便携精简JRE & JDK &

    Java Portable 1.8.0.181 绿色便携精简JRE, jPortable在线安装后提取版。最大化保持功能版。7z压缩后44M解压后162M。可配合便携版360极速浏览器,firefox等浏览器使用,使便携式java随时可用

    Java:jdk1.8.0_25(少个jre)

    虽然这个压缩包中缺少了JRE(Java Runtime Environment),但JDK本身已经包含了运行Java应用程序所需的大部分组件。JRE是Java应用程序运行的环境,通常由Java虚拟机(JVM)、Java基础类库和相关组件组成。如果要在...

    一张图看懂JVM、JRE、JDK

    一张图看懂JVM、JRE、JDK

    jdk与jre的区别.

    ### JDK与JRE的区别 #### 一、JDK与JRE的基本概念 ##### JDK(Java Development Kit) JDK,即Java开发工具包,是面向开发人员使用的软件开发工具包(SDK)。它包含了编译、调试和运行Java应用程序所需的所有工具...

    jdk、jre、jvm的区别

    ### JDK、JRE与JVM的区别详解 #### 一、引言 在深入探讨JDK、JRE与JVM之间的区别之前,我们首先需要明确这三个概念的基本定义及其各自的作用。对于初学者而言,理解这些核心组件是学习Java编程的基础。 #### 二、...

    jdk1.8.0_171的jre裁剪版本

    用户在部署或分发Java桌面应用时,可以将这个裁剪版JRE与应用程序一起提供,确保目标机器上无需额外安装完整的JDK即可运行程序。 总结一下,`jdk1.8.0_171的jre裁剪版本`是一个针对Java桌面应用优化的、精简版的...

    JDK和JRE文件的区别

    ### JDK与JRE的区别:深度解析 在深入探讨JDK(Java Development Kit)与JRE(Java Runtime Environment)之间的区别之前,我们先来定义一下这两个概念。JDK是Java开发工具包,它包含了编译、运行和调试Java应用...

    Java8_64_jre_jdk_for_aix.rar

    内容: 1, Java8_64.sdk.8.0.0.636.tar.gz 2, Java8_64.jre.8.0.0.636.tar.gz 安装顺序: 1,Java8_64.jre.8.0.0.636.tar.gz 2,Java8_64.sdk.8.0.0.636.tar.gz 安装条件: ** 需要AIX的bos.rte>=6.1.7

    jre_jdk_windows64

    Java开发工具包(Java Development Kit,简称JDK)和Java运行环境(Java Runtime Environment,简称JRE)是Java编程语言的核心组成部分,对于Windows平台上的Java开发者来说,它们是不可或缺的。"jre_jdk_windows64...

    jre/jdk 1.6 6u45

    1. **多平台支持**:提供的压缩包内包含了Windows系统的32位和64位版本的JDK和JRE,以及Linux系统的64位版本的JRE和JDK。这表明该版本致力于跨平台兼容性,满足不同操作系统的需求。 2. **JVM优化**:每个JRE都包含...

    jre,jdk.zip

    jdk,jre 1.8.0.241版本,方便快捷下载。官网下载要花很多时间,为了方便,一起下载减少时间浪费。 JRE:Java Runtime Environment(java运行时环境)。 JDK:Java Development Kit(java开发工具包)。

    JRE和JDK.pdf

    JRE和JDK.pdf

    jdk和jre的区别

    ### JDK与JRE的区别 #### 一、概念解析 **JDK**(Java Development Kit):作为Java开发工具包,它是面向开发人员的核心组件。它不仅包含必要的运行环境(即JRE),还提供了完整的Java软件开发环境,包括编译器...

    linux jdk1.7 64位 jre jdk

    总的来说,Linux JDK 1.7 64位版本的JRE和JDK对于Linux环境下的Java开发者和系统管理员来说,是进行Java应用程序开发、运行和维护不可或缺的工具,它提供了丰富的功能和优化,有助于提升开发效率和系统的稳定运行。

    JDK JRE 的作用与区别

    ### JDK与JRE的作用及区别 #### 一、概述 在深入探讨JDK与JRE的具体差异之前,我们首先需要了解这两个概念的基本定义及其在Java开发环境中的地位。 #### 二、JDK(Java Development Kit) JDK是Java开发工具包的...

Global site tag (gtag.js) - Google Analytics