杰瑞科技汇

java jre 与jdk的区别

生动的比喻:盖房子

想象一下你要盖一栋房子:

java jre 与jdk的区别-图1
(图片来源网络,侵删)
  • JDK (Java Development Kit - Java开发工具包)相当于“建筑工地的全套工具和材料”

    • 工具:包括锤子、电钻、扳手、卷尺、水平仪等(对应编译器 javac、调试器 jdb、文档生成工具 javadoc 等)。
    • 材料:包括钢筋、水泥、砖块、玻璃等(对应Java类库API,如 java.lang, java.util 等)。
    • 图纸:建筑规范和蓝图(对应Java语言规范和JVM规范)。
    • 总包工头:能够指挥工人,使用工具,将材料建成房子(对应 java 命令,可以运行编译后的代码)。
    • JDK是给开发者用的,他们需要这些工具来编写、编译、调试和运行Java程序。
  • JRE (Java Runtime Environment - Java运行时环境)相当于“已经建好的毛坯房”

    • 基础设施:房子的地基、承重墙、水电管线、门窗等(对应JVM和核心类库)。
    • 功能:你可以住在里面,打开灯(运行程序),使用插座(调用API),但你不能拆墙或者自己盖新房间(不能修改或编译代码)。
    • JRE是给普通用户运维人员用的,他们只需要运行已经开发好的Java程序(比如玩一个Java游戏,或者运行一个企业级应用),而不需要关心程序是如何被创建出来的。

核心区别总结

特性 JDK (Java Development Kit) JRE (Java Runtime Environment)
全称 Java Development Kit Java Runtime Environment
定位 开发工具包 运行时环境
使用者 程序员/开发者 普通用户/运维人员
主要功能 用于开发、编译、调试和运行Java程序 仅用于运行Java程序
包含关系 包含JRE,以及开发工具(如编译器) 被JDK包含,是运行Java程序所必需的环境
核心组件 - JRE
- 编译器 (javac)
- 调试器 (jdb)
- 文档生成器 (javadoc)
- 打包工具 (jar)
- JVM (Java虚拟机)
- Java核心类库 (APIs)
简单记忆 JDK = JRE + 开发工具 JRE = JVM + Java类库

技术细节拆解

JDK (Java开发工具包)

JDK是Java开发的核心,它是一个完整的软件开发套件,当你下载并安装了JDK后,你就拥有了开发和运行Java程序所需的一切。

JDK的主要组成部分包括:

java jre 与jdk的区别-图2
(图片来源网络,侵删)
  • JRE (Java运行时环境):这是JDK的基础,没有它,编译后的代码也无法运行。
  • 开发工具:这是JDK与JRE最关键的区别所在。
    • 编译器 (javac.exe):这是最重要的工具,它将程序员写的、人类可读的 .java 源代码文件,翻译成机器(JVM)可执行的 .class 字节码文件。
    • 打包工具 (jar.exe):将多个 .class 文件和资源文件打包成一个 .jar 文件,便于分发和管理。
    • 文档生成工具 (javadoc.exe):从你的源代码注释中自动生成API文档。
    • 调试器 (jdb.exe / IDE内置):用于帮助开发者查找和修复代码中的错误。
    • java.exe 命令:用于启动JVM,加载并运行你的 .class 字节码文件。

如果你要写Java代码,你必须安装JDK。

JRE (Java运行时环境)

JRE是Java程序运行的“舞台”,一个Java程序(通常是 .jar 文件或 .class 文件)要被执行,必须依赖于JRE。

JRE的主要组成部分包括:

  • JVM (Java虚拟机):这是Java跨平台的核心,JVM是一个抽象的虚拟计算机,它负责在特定的操作系统(如Windows, Linux, macOS)上执行Java字节码,JVM会读取你的 .class 文件,并将其解释或编译成当前操作系统能理解的本地机器码来执行。
  • Java核心类库 (Java Class Libraries / APIs):这是一系列预先编写好的、功能丰富的代码包(如 java.lang, java.io, java.net 等),你的Java程序在运行时,会调用这些库中的类和方法来实现功能(进行网络连接、文件读写、创建数据结构等),你可以把它理解为一个巨大的“工具箱”。

如果你只是想运行一个Java程序(比如一个游戏或软件),你只需要安装JRE。 (注意:从Java 11开始,Oracle已经不再单独提供JRE的下载,JRE的功能被整合到了JDK中,但为了理解概念,这个区分依然非常重要。)


一个简单的流程来理解它们的关系

  1. 开发阶段

    • 程序员使用JDK中的文本编辑器或IDE(如IntelliJ IDEA, Eclipse)编写 HelloWorld.java 源文件。
    • 程序员使用JDK中的编译器 javac 来编译 HelloWorld.java,生成 HelloWorld.class 字节码文件。
  2. 运行阶段

    • 程序员或用户使用JDK中包含的 java 命令(这个命令本身就在JRE环境中运行)来执行 HelloWorld.class
    • JRE被激活。
    • JRE中的JVM加载 HelloWorld.class 文件。
    • JRE中的Java核心类库被调用(System.out.println)。
    • JVM将字节码翻译成当前操作系统能执行的指令,最终在屏幕上打印出 "Hello, World!"。

现代Java的演变(重要补充)

Java 9 开始,Oracle对JDK的模块结构进行了重大重构,引入了 JPMS (Java Platform Module System)

Java 11 开始,Oracle官方的JDK安装包中不再包含单独的JRE,JDK本身就是完整的运行时环境,这意味着:

  • 现在你只需要下载并安装JDK,它已经包含了运行Java程序所需的一切。
  • jre 目录的概念在JDK安装目录中逐渐淡化。
  • 这种变化简化了部署,因为开发者不再需要区分是安装JDK还是JRE。对于开发者来说,安装JDK是唯一的选择。

尽管在现代JDK中JRE作为一个独立的概念和安装包已经弱化,但 JDK和JRE在功能上的核心区别——开发工具 vs. 运行环境——依然是理解Java平台工作原理的基础。 你可以把现代的JDK看作是“包含了所有开发和运行功能的完整工具箱”。

分享:
扫描分享到社交APP
上一篇
下一篇