JDK vs JRE vs JVM:高效图解三者的关系


JDK vs JRE vs JVM:高效图解三者的关系


一、形象比喻

汽车工厂三部曲

- **JVM(Java虚拟机)**:装配机器人,负责把设计图(字节码)变成真实汽车  
- **JRE(Java运行环境)**:完整的生产线(机器人+零件库+质检员)  
- **JDK(Java开发工具包)**:整个工厂(生产线+设计室+研发工具)  

二、层级关系图(Mermaid流程图)
JDK
JRE
JVM
基础类库
其他工具
编译器 javac
调试工具 jdb
文档生成器 javadoc

三、详细对比(Markdown表格)
组件 功能 比喻 包含内容
JDK 开发Java程序的全套工具 汽车工厂总部 JRE + 编译器 + 调试器 + 文档工具
JRE 运行Java程序的必要环境 汽车生产线 JVM + 基础类库 + 启动器
JVM 执行字节码的虚拟机 智能装配机器人 类加载器 + 执行引擎 + 内存管理

四、执行流程示意图(Mermaid序列图)
开发者 JDK JRE 用户 JVM 编写HelloWorld.java 使用javac编译 生成HelloWorld.class(字节码) 运行java HelloWorld 加载字节码 转换成机器码 输出"Hello World" 开发者 JDK JRE 用户 JVM


五、经典问答

❓ 为什么安装JDK后还要配置环境变量?

就像给汽车工厂的地图标注地址:  
1. **PATH变量**:告诉系统在哪里找`javac`和`java`命令  
   ```bash  
   # 示例:Linux/Mac配置  
   export PATH=$PATH:/usr/lib/jdk-17/bin  
  1. JAVA_HOME变量:告诉IDE和其他工具JDK的安装位置
    export JAVA_HOME=/usr/lib/jdk-17  
    

**❓ 为什么Android不用JVM?**  
```markdown  
- Android使用**Dalvik/ART虚拟机**,直接运行`.dex`格式字节码  
- 但底层原理相似:`Java代码 → 编译 → 字节码 → 虚拟机执行`  

六、动手验证(代码块演示)

1. 查看组件版本

# 检查JDK编译器  
javac -version  # 输出:javac 17.0.1  

# 检查JRE环境  
java -version   # 输出:openjdk 17.0.1 2021-10-19  

2. 体验完整流程

// HelloWorld.java  
public class HelloWorld {  
    public static void main(String[] args) {  
        System.out.println("Java三剑客,我分清了!");  
    }  
}  
# 用JDK编译  
javac HelloWorld.java  

# 用JRE运行  
java HelloWorld  
# 输出:Java三剑客,我分清了!  

七、总结图(Mermaid关系图)
编写.java文件
包含
包含
依赖
提供
运行.class文件
开发者
JDK
JRE
JVM
类库
开发工具
用户

掌握这三者的关系,就像理解了汽车工厂的流水线——JDK造车,JRE开车,JVM是引擎

你可能感兴趣的:(jvm,开发语言,java)