【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 执行 -> 程序运行
相关推荐
代码探秘者1 小时前
【Redis】双写一致性:延迟双删 / 读写锁 / 异步通知 / Canal,一文全解
java·数据库·redis·后端·算法·缓存
witAI1 小时前
**即梦仿真人剧2025推荐,沉浸式情感交互新体验**据
python·交互
tsyjjOvO2 小时前
代理模式详解:静态代理、JDK 动态代理、CGLIB 动态代理
java·开发语言·代理模式
像风一样的男人@2 小时前
python --html转pdf/pdf分页优化
python·pdf·html
IT枫斗者2 小时前
CentOS 7 一键部署 K8s 1.23 + Rancher 2.7 完整指南
java·linux·spring boot·后端·kubernetes·centos·rancher
.ZGR.2 小时前
智能无人机防空平台 V2.0 ——攻击反制
java·开发语言·无人机
Predestination王瀞潞2 小时前
SQL 片段的提取与复用机制
java·sql·mybatis
㱘郳2 小时前
Python开发 Django和DRF框架 推荐部分B站视频
开发语言·python·django