【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 执行 -> 程序运行
相关推荐
0xDevNull17 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
华科易迅18 小时前
MybatisPlus增删改查操作
android·java·数据库
standovon18 小时前
Spring Boot整合Redisson的两种方式
java·spring boot·后端
IAUTOMOBILE19 小时前
Python 流程控制与函数定义:从调试现场到工程实践
java·前端·python
hutengyi19 小时前
PostgreSQL版本选择
java
皮皮林55119 小时前
重磅!JetBrains 正式发布全新的 AI 开发工具,定名 AI IDE AIR
java·intellij idea
MX_935919 小时前
SpringMVC请求参数
java·后端·spring·servlet·apache
ID_1800790547319 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
lifewange19 小时前
java连接Mysql数据库
java·数据库·mysql
云原生指北20 小时前
命令行四件套:fd-rg-fzf-bat
java·大数据·elasticsearch