Java中JDK、JRE、JVM三者之间的关系

简介: 在Java生态中,JDK、JRE、JVM呈严格层级包含关系:JDK(开发工具包)包含JRE(运行时环境),JRE又包含JVM(虚拟机)。JVM执行字节码并实现跨平台;JRE提供运行所需类库与JVM;JDK则额外集成编译器、调试器等开发工具。开发者装JDK,用户只需JRE。(239字)

在 Java 生态系统中,JDK、JRE 和 JVM 是三个核心概念,它们之间存在着明确的‌包含关系‌和‌层级依赖‌。

简单来说,三者的关系可以概括为:‌JDK 包含 JRE,JRE 包含 JVM‌。即:JDK > JRE > JVM。

以下是详细的解析:

  1. 核心定义与功能

JVM (Java Virtual Machine,Java 虚拟机)‌

定义‌:JVM 是一个抽象的计算机器,是 Java 程序运行的核心引擎。它负责将编译后的字节码(.class文件)解释或即时编译(JIT)成特定操作系统的机器指令并执行。
核心作用‌:实现 Java 的“一次编写,到处运行”(Write Once, Run Anywhere)。它屏蔽了底层操作系统(Windows, Linux, macOS等)的差异。
主要功能‌:内存管理(垃圾回收 GC)、字节码执行、安全检查、多线程支持等。
注意‌:JVM 本身不能独立运行 Java 程序,因为它缺少运行所需的核心类库。

JRE (Java Runtime Environment,Java 运行时环境)‌

定义‌:JRE 是运行 Java 程序所需的最小环境集合。
组成公式‌:‌JRE = JVM + Java 核心类库 (Libraries/API) + 其他支持文件‌。
核心作用‌为已编译好的 Java 程序提供运行环境。如果你只需要‌运行‌现有的 Java 程序(如 Minecraft 游戏、部署好的 Java Web 应用),只需安装 JRE 即可。
包含内容‌:除了 JVM,还包含了 java.lang, java.util, java.io 等基础类库,以及启动 Java 应用程序的工具(如 java.exe)。

JDK (Java Development Kit,Java 开发工具包)‌

定义‌:JDK 是面向 Java 开发者的全功能软件开发工具包。
组成公式‌:‌JDK = JRE + 开发工具 (Tools)‌。
核心作用‌:用于‌编写、编译、调试‌ Java 程序。如果你需要开发 Java 应用程序,必须安装 JDK。
包含内容‌:
完整的 JRE。
编译器 (javac):将 .java 源码编译成 .class 字节码。
调试器 (jdb)。
文档生成工具 (javadoc)。
打包工具 (jar)。
其他监控和分析工具 (jconsole, javap 等)。

  1. 三者关系图解

可以用以下层级结构来直观理解它们的包含关系:

text
JDK (Java Development Kit)
├── JRE (Java Runtime Environment)
│ ├── JVM (Java Virtual Machine) <-- 核心执行引擎
│ └── Core Class Libraries <-- 核心类库 (如 rt.jar, modules 等)
└── Development Tools <-- 开发工具 (javac, jdb, javadoc, jar 等)

  1. 关键区别对比表
    表格
    维度 JVM (Java 虚拟机) JRE (运行时环境) JDK (开发工具包)
    全称‌ Java Virtual Machine Java Runtime Environment Java Development Kit
    主要用户‌ 底层实现者/跨平台机制 最终用户 (End Users) 开发者 (Developers)
    核心功能‌ 执行字节码、内存管理、跨平台 提供运行 Java 程序的完整环境 提供开发、编译、调试、运行 Java 程序的全部能力
    包含内容‌ 解释器/JIT编译器、GC、运行时数据区 JVM + 核心类库 + 配置文件 JRE + 编译器(javac) + 调试器 + 文档工具等
    是否可单独运行代码‌ 否 (缺少类库支持) 是 (可运行已编译的程序) 是 (可开发并运行程序)
    典型场景‌ 嵌入在 JRE 中,不可见 服务器部署、普通用户运行 Java 应用 程序员写代码、IDE (IntelliJ/Eclipse) 环境配置
  2. 常见疑问解答

Q: 为什么安装了 JDK 就不需要单独安装 JRE?‌

A: 因为 JDK 内部已经包含了一个完整的 JRE。在安装 JDK 的目录下,通常会有一个 jre 文件夹(或在较新版本中集成在 lib 或 modules 中),里面包含了运行 Java 程序所需的所有组件。

Q: 为什么有时候服务器上只装 JRE 而不装 JDK?‌

A:
安全性‌:JDK 包含编译器 (javac) 和调试工具,如果服务器被入侵,攻击者可能利用这些工具编译恶意代码。仅安装 JRE 可以缩小攻击面。
资源节省‌:JRE 比 JDK 更轻量,占用磁盘空间更小,适合容器化部署(如 Docker)。

Q: Java 是编译型还是解释型语言?‌

A: Java 既有编译过程也有解释/即时编译过程。
编译‌:使用 JDK 中的 javac 将源代码编译成字节码(.class)。
执行‌:JVM 加载字节码,通过解释器或 JIT 编译器将其转换为本地机器码执行。
总结
如果你是‌Java 开发者‌,你需要安装 ‌JDK‌,因为它提供了开发、编译和运行所需的一切。
如果你只是‌普通用户‌,只需要运行 Java 程序(如某些游戏或应用软件),你只需要安装 ‌JRE‌。
JVM‌ 是这一切的基础,它是 Java 跨平台特性的核心,但它是嵌套在 JRE 和 JDK 内部工作的,用户通常不直接与其交互。

目录
相关文章
|
2月前
|
缓存 前端开发 API
Qwen3.8‑Max旗舰大模型全解析:MoE架构百万上下文、原生多模态、长周期Agent与API完整实操教程
随着智能体业务走向真实生产环境,市场对大模型提出了更高的综合要求,既要有强悍的文本推理、长周期任务规划能力,又需要原生看懂截图、图表、长视频,同时兼顾科研论文分析、完整项目开发、复杂办公文档处理等复合场景。前代旗舰在面对跨多天持续迭代的软件开发任务、百页图文混合文档、长视频素材解析时,往往会出现推理衰减、细节丢失、多模态与文本推理割裂等问题。Qwen3.8‑Max作为新一代旗舰MoE混合专家大模型,总参数量达到2.4万亿,单Token激活参数量约95B,首次实现Max级别旗舰原生多模态能力,同时开放权重开源,兼顾云端API调用与本地部署两条路线,在编程智能体、长周期自主任务、科研文献处理、图文
761 1
|
5月前
|
人工智能 安全 Java
新一代 Java 基石:JDK 25 下载安装详细配置教程 附安装包
JDK 25 于2025年9月16日发布,是继JDK 21后的全新LTS长期支持版本,含18个JEP增强提案,全面升级语言语法、虚拟线程、GC、AI适配、安全与模块化,启动更快、内存更优,为企业级生产环境首选稳定版本。
2699 0
|
JSON Java 数据格式
有关Java调用第三方接口【Content-type为form-data】的示例代码
有关Java调用第三方接口【Content-type为form-data】的示例代码
1363 0
|
Linux Windows
Linux下如何修改host文件
Linux下如何修改host文件
739 0
|
存储 安全 API
什么是API Token?
API令牌是一种用于访问和验证API(应用程序编程接口)的安全凭证。它是一个字符串,用于识别和授权应用程序或用户访问特定的API服务或资源。==API令牌可以是访问令牌(Access Token)或密钥(API Key)==。
4894 0
|
JavaScript
Nuxt.js(Vue SSR)项目配置以及开发细节
Nuxt.js(Vue SSR)项目配置以及开发细节
673 0
|
Web App开发 小程序 iOS开发
Fiddler - 抓包手机App、微信小程序等网络请求
Fiddler - 抓包手机App、微信小程序等网络请求
2732 0
Fiddler - 抓包手机App、微信小程序等网络请求
|
6月前
|
存储 Rust NoSQL
一条命令迁移,帮你实现 OpenClaw 与 Hermes Agent 记忆互通!
本文是基于阿里云 Tablestore 的 Agent 记忆共享实战指南:一条命令迁移 OpenClaw 记忆至 Hermes,通过统一 Tablestore 实例、应用 ID 与租户 ID,实现跨Agent(如龙虾与马)记忆自动互通、实时同步与语义检索,支持 CLI 管理与对话中直接调用,安全可靠,开箱即用。
13046 128
|
3月前
|
Oracle IDE Java
Java JDK下载、安装、配置、运行程序一篇搞定(2026实测)
本文详解JDK安装与配置全流程,涵盖JDK 8/11/17/21/25/26版本对比、LTS选型建议、Windows环境变量配置及首个Java程序编译运行,实操性强,零基础可快速上手。(239字)
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)