【Java】JDK、JRE、JVM三者最通俗的讲解

一文搞懂 JDK、JRE、JVM:Java 程序运行的底层原理


在 Java 学习和开发中,你经常会听到三个词:

JDK、JRE、JVM

它们看起来很相似,但实际上有本质区别。理解它们不仅能让你更好地理解 Java 的运行原理,也有助于面试回答类似问题。

本文将从以下几个方面系统讲解:

  1. JDK、JRE、JVM 各自的定义与作用
  2. 三者的关系
  3. Java 代码从编写到运行的完整流程
  4. 面试常见问题总结

一、JVM(Java Virtual Machine)

1.1 定义

JVM,全称 Java 虚拟机 (Java Virtual Machine),是 Java 程序运行的 核心执行环境

它是 Java "一次编写,到处运行"的关键所在。

简单理解:

text 复制代码
JVM = Java程序的执行引擎

1.2 JVM 的作用

JVM 的核心职责包括:

  1. 加载类(Class Loader)
  2. 执行字节码(Interpreter / JIT 编译器)
  3. 内存管理与垃圾回收(Heap / Stack / Method Area)
  4. 提供运行时数据区(Program Counter / 栈 / 堆 / 方法区等)
  5. 异常处理与安全管理

总结一句话:

JVM 就是 Java 程序运行时的虚拟计算机。


1.3 JVM 特点

  • 与平台无关:不同系统只需安装对应 JVM
  • 执行字节码:*.class 文件,而非直接执行源代码
  • 提供垃圾回收机制:自动管理内存
  • 支持多语言:不仅可以运行 Java,也可运行 Kotlin、Scala 等编译到 JVM 字节码的语言

二、JRE(Java Runtime Environment)

2.1 定义

JRE,全称 Java 运行环境 (Java Runtime Environment),是 运行 Java 程序所需的软件环境

它包含了:

  • JVM:执行引擎
  • 核心类库 :如 java.lang.*java.util.*
  • 其他运行所需资源:如 properties 文件等

换句话说:

text 复制代码
JRE = JVM + Java 核心类库 + 配置文件

2.2 JRE 的作用

JRE 的主要作用:

  1. 提供 JVM 实现
  2. 提供 Java 标准库支持
  3. 让 Java 程序能够在不同系统上运行

注意:

  • JRE 不能用于开发,因为它没有编译器和调试工具
  • 只能用来 运行已编译的 Java 程序

三、JDK(Java Development Kit)

3.1 定义

JDK,全称 Java 开发工具包 (Java Development Kit),是 Java 开发人员必须安装的工具包

它包含:

  1. JRE(即运行环境)
  2. Java 编译器 javac
  3. 调试工具 (如 jdb
  4. 文档工具 (如 javadoc
  5. 其他开发工具 (如 jar, javap 等)

总结:

text 复制代码
JDK = JRE + 开发工具

3.2 JDK 的作用

JDK 是开发者用来:

  • 编写 Java 代码
  • 编译成字节码
  • 打包和调试程序

开发流程:

text 复制代码
编写源代码 -> 使用 javac 编译 -> 生成字节码 -> 用 JRE / JVM 执行

四、JDK、JRE、JVM 的关系

用图示理解最直观:

复制代码
┌─────────────┐
│    JDK      │
│ ┌─────────┐ │
│ │  JRE    │ │
│ │ ┌─────┐ │ │
│ │ │ JVM │ │ │
│ │ └─────┘ │ │
│ └─────────┘ │
└─────────────┘

文字解释:

  • JVM:执行字节码
  • JRE:提供 JVM 和核心类库
  • JDK:提供 JRE + 开发工具

五、Java 程序从编写到运行的全过程

理解 JDK、JRE、JVM 的最好方式就是看 程序执行流程

  1. 编写源代码HelloWorld.java
  2. 编译源代码 (JDK javac 工具)
    • 生成字节码文件 HelloWorld.class
  3. 运行字节码 (JRE 中的 JVM)
    • JVM 加载类
    • JVM 执行字节码
    • JVM 调用垃圾回收、异常处理等
  4. 输出结果

流程示意:

复制代码
HelloWorld.java
      │
      ▼  javac
HelloWorld.class
      │
      ▼  java (JRE/JVM)
程序运行

六、面试常考点总结

1. JVM、JRE、JDK 区别

名称 含义 作用 面试易考点
JVM Java 虚拟机 执行字节码,提供内存管理 核心执行环境,垃圾回收,跨平台
JRE Java 运行环境 提供 JVM + 核心类库,运行 Java 程序 不能开发,只能运行
JDK Java 开发工具包 提供 JRE + 编译器 + 开发工具 开发必备,包含 javac、jar、javadoc 等

2. JVM 为什么能实现"一次编写,到处运行"?

  • Java 源代码编译成字节码
  • 字节码由 JVM 执行
  • 不同操作系统有不同的 JVM
  • 所以程序无需修改即可跨平台运行

3. JDK 是否必须安装?

  • 开发必需安装 JDK
  • 仅运行程序可以安装 JRE
  • 现代 JDK(JDK 11+)中 JRE 已被整合在 JDK 中,单独安装 JRE 已不常见

4. JVM 内部核心组件

面试可能问:

  • 类加载器(ClassLoader)
  • 执行引擎(Interpreter + JIT)
  • 内存管理(Heap / Stack / Method Area)
  • 垃圾回收机制

七、总结

理解 JDK、JRE、JVM 的核心要点:

  1. JVM 是执行环境
  2. JRE 提供 JVM + 核心类库
  3. JDK 提供开发工具 + JRE

完整运行流程:

复制代码
源代码 -> 编译 -> 字节码 -> JVM 执行 -> 程序运行
相关推荐
小苗卷不动几秒前
Python的小知识
python
星空ξ1 分钟前
OpenCode + Oh-My-OpenCode 配置指南:集成 GitHub Copilot 模型与 Java LSP (jdtls)
java·github·copilot·opencode·oh-my-opencode
Seven971 分钟前
Tomcat Request请求处理:Container设计
java
逸Y 仙X3 分钟前
文章十五:ElasticSearch 运用ingest加工索引数据
java·大数据·elasticsearch·搜索引擎·全文检索
程序员小远4 分钟前
如何编写测试用例?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
旦莫5 分钟前
AI生成测试用例:一个Prompt模板让AI从Excel模板生成自动化脚本
人工智能·python·测试开发·自动化·prompt·测试用例
东北洗浴王子讲AI7 分钟前
从零搭建AI文学创作助手:基于API聚合站+Flask实现智能写诗、小说生成神器
人工智能·python·flask
2301_7662834411 分钟前
Golang怎么实现防重复提交_Golang如何用Token机制防止表单重复提交【技巧】
jvm·数据库·python
qq_4142565711 分钟前
CSS如何实现元素在容器内居中_利用margin-auto技巧
jvm·数据库·python
2401_8242226912 分钟前
如何用 Transferable 对象零拷贝转移超大数组内存给子线程
jvm·数据库·python