JDK和JRE的区别

很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。
JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。
如果安装了JDK,会发同你的电脑有两套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目录下,后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装这个位于 C:\Program Files\Java 目录下的JRE。如果你只安装JRE,而不是JDK,那么只会在 C:\Program Files\Java 目录下安装唯一的一套JRE。
JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。所以当你装完JDK后,如果分别在硬盘上的两个不同地方安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java PC机,都具有运行Java程序的功能。所以我们可以说,只要你的电脑安装了JRE,就可以正确运行Java应用程序。
1、为什么Sun要让JDK安装两套相同的JRE?
这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 这个意思是说,你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一样的,会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现\lib目录下的程序都很小,不大于2 9K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:\Program Files\Java目录下的那套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被执行有很大的关系。

ADD:(小小结)
1.JVM -- java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。2.JRE -- java runtime environmentJRE是指java运行环境。光有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了。(jre里有运行.class的java.exe)3.JDK -- java development kitJDK是java开发工具包,基本上每个学java的人都会先在机器上装一个JDK,那他都包含哪几部分呢?让我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、 jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。bin:最主要的是编译器(javac.exe)include:java和JVM交互用的头文件lib:类库jre:java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就ok了。
<think>好的,用户想了解Java中安装JDKJRE区别以及功能对比。首先,我需要回忆一下JDKJRE的基本定义。JDK是Java开发工具包,而JRE是Java运行时环境。根据之前看到的引用内容,JDK是给开发者用的,里面包含了JRE,还有编译器各种工具。JRE则主要是运行Java程序所需的环境,比如JVM类库。 接下来要整理两者的主要区别。用户可能想知道安装时是否需要同时安装两者,或者在不同场景下如何选择。根据引用[1],安装JDK后其实已经包含了JRE,所以开发时只需要装JDK即可。而如果只是运行程序,装JRE就够了,这样可以节省空间。 然后,功能对比部分需要明确列出各自包含的组件。比如JDK有javac编译器、调试工具等,而JRE主要是运行环境必要的类库。可能还需要提到JDKJRE的目录结构差异,比如JDK包含的bin目录下有更多开发工具。 用户可能还会关心实际应用中的例子,比如开发环境需要JDK,服务器部署可能只需要JRE。不过现在很多服务器环境可能直接使用JDK,特别是需要监控工具的时候,但引用中提到普通程序运行JRE足够,需要注意这一点。 另外,版本兼容性也是一个点,需要确保安装的JDKJRE版本匹配,避免冲突。可能还要提醒用户如果已经安装了JDK,就不必单独安装JRE,因为JDK已经包含。 最后,生成相关问题需要考虑用户可能进一步的问题,比如如何检查是否安装成功,或者如何配置环境变量,但根据用户当前的问题,可能更关注区别功能对比。所以相关问题可以包括选择JDK还是JRE,如何安装,或者历史版本的变化等。 需要确保回答结构清晰,分点列出定义、区别、功能对比、安装建议,并引用提供的资料来支持每个点。同时注意使用中文,避免使用Markdown,保持口语化但信息准确。</think>### JDKJRE的功能对比及安装区别 #### 1. **定义核心功能** - **JRE (Java Runtime Environment)** 是Java程序的运行环境,包含Java虚拟机(JVM)、基础类库(如`rt.jar`)其他支持文件。它仅用于运行已编译的Java程序(`.class`或`.jar`文件),例如用户端的桌面应用或服务器端程序[^1][^2]。 - **JDK (Java Development Kit)** 是Java开发工具包,**完全包含JRE**,并额外提供编译器(`javac`)、调试器(`jdb`)、文档生成工具(`javadoc`)及性能分析工具(如`jconsole`、`jstack`)。开发者需通过JDK编写、编译调试代码[^2]。 #### 2. **安装区别选择建议** | **对比维度** | **JRE** | **JDK** | |--------------------|----------------------------------|----------------------------------| | **安装必要性** | 仅运行Java程序时必需 | 开发Java程序时必需 | | **包含关系** | JDK的子集 | 包含完整JRE及开发工具 | | **磁盘占用** | 较小(约40-60MB) | 较大(约200-400MB) | | **典型使用场景** | 用户端程序运行环境 | 开发者编写、测试、打包代码 | #### 3. **实际应用建议** - **开发场景**:必须安装JDK,例如使用IDE(如IntelliJ IDEA或Eclipse)时,IDE依赖`javac`编译代码[^2]。 - **部署场景**:若服务器仅运行Java程序(如Spring Boot打包的JAR文件),安装JRE即可节省资源[^1]。 - **版本兼容性**:需确保JDKJRE版本一致,例如JDK 17生成的类文件需JRE 17运行,避免出现`UnsupportedClassVersionError`。 #### 4. **安装示例说明** - **仅安装JRE**:适用于普通用户,通过官网下载JRE安装包,配置`JAVA_HOME`指向JRE路径。 - **安装JDK**:开发者从Oracle或OpenJDK获取JDK安装包,安装后可通过命令行验证: ```bash javac -version # 检查编译器(JDK独有) java -version # 检查运行时环境(JDK/JRE均有) ``` #### 5. **历史版本变化** 自Java 9后,Oracle调整了JDK/JRE的发布模式,部分版本不再提供独立JRE下载,而是通过`jlink`工具生成定制化运行时环境[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值