一张图讲清楚JDK、JRE、JVM的区别

0 阅读5分钟

💬 “刚学Java的时候,看到JDK、JRE、JVM三者关系,完全不知道从哪下手…”

💬 “看视频跟着敲代码,一离开视频就忘了怎么写,感觉脑子和手不同步”

💬 “查了半天资料,每个教程说法都不一样,越查越懵”

如果你也中过上面的枪,那这篇文章就是为你准备的。

花了一整天时间,我把这个知识点彻底梳理了一遍。看完这篇,你也能搞懂JDK、JRE、JVM三者关系。

被这三个词绕晕的那些日子

刚学 Java 那会儿,JDK、JRE、JVM 这三个词就像三胞胎,看着眼熟,一问就懵:

  • 一开始以为JDK就是JVM,都是跑程序的。
  • 后来发现不对,JDK好像比JVM大不少。
  • 再后来听说 JRE 包含 JVM,那 JRE 和 JDK 又是什么关系?
  • 最后彻底晕了:“JDK包含JRE,JRE包含JVM”???

最要命的是,javac 和 java 这两个命令到底是干啥的?为什么有时候能编译不能运行,有时候能运行不能编译?

别笑,这些都是我曾经的真实困惑。今天咱们就一次性彻底搞明白!

用装修房子打个比方,一下就通了

想象你要装修一套房子

毛坯房 = JVM(只提供基础能力)

  • 只有水泥墙、水电管道。
  • 理论上“能住”,其实只能看看样子。

精装房 = JRE(包含了住进去的基本条件)

  • 地板铺好了,家电配齐了,床也摆上了。
  • 你可以住进去了,但没法装修新东西。

装修材料+工具箱 = JDK(包含了工具齐全的装修材料库)

  • 有锤子、螺丝刀、电钻、油漆。
  • 你不仅能住,还能改造成你喜欢的样子。

换成Java开发:

比方Java世界实际内容
毛坯房JVM执行字节码的虚拟机
精装房JREJVM + 核心类库(能运行Java程序)
装修材料+工具箱JDKJRE + 开发工具(能写Java程序)

image.png

JVM:Java 的“心脏”

什么是JVM?

JVM = Java Virtual Machine(Java虚拟机)

它是Java能够"一次编写,到处运行"的核心!简单来说:

  • JVM是一个安装在电脑上的程序。
  • 它能理解和执行 Java字节码(.class文件)。
  • 不同的操作系统有不同版本的JVM实现,但对Java编写程序的执行结果是一致的。

JVM的主要功能

1. 加载字节码

// Java源代码
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

// 使用 javac 编译后变成 Hello.class,JVM 负责把它读进内存

2. 执行字节码并翻译成机器指令

image.png

3. 内存管理(垃圾回收)

String s = new String("Hello");  // 创建对象
s = null;  // 没人引用了,JVM会自动回收; 不用像 C 语言一样手动 free,爽不爽?

4. 跨平台适配

  • Windows有Windows版JVM
  • Mac有Mac版JVM
  • Linux有Linux版JVM
  • .class 文件只有一个,到处都能跑!

JVM的组成结构

image.png

JRE:只负责“运行”的最小环境

什么是JRE?

JRE = Java Runtime Environment(Java运行时环境)

公式:JRE = JVM + 核心类库

JRE包含什么?

组件说明
JVM虚拟机,执行字节码
核心类库常用的类,如StringArrayListHashMap
支持文件配置文件、字体、资源文件等

核心类库举例

// 这些类都在JRE的核心类库里
import java.util.List;           // 集合类
import java.io.FileInputStream;  // IO类
import java.net.Socket;           // 网络类
import java.sql.Connection;       // 数据库类

JRE能做什么?不能做什么?

能做的

  • ✅ 运行已经编译好的Java程序(.jar文件)
  • ✅ 执行别人写好的Java工具
  • ✅ 运行Java Web应用(Tomcat等)

不能做的

  • ❌ 编译Java源代码(需要javac)
  • ❌ 生成Java文档(需要javadoc)
  • ❌ 调试Java程序(需要jdb)

JDK:程序员的“瑞士军刀”

什么是JDK?

JDK = Java Development Kit(Java开发工具包)

公式:JDK = JRE + 开发工具

如果说JRE是"精装房能住人",那JDK就是"给你全套工具让你能装修"!

JDK包含什么?

JDK 安装目录
├── bin/               ← 开发工具(最常用)
│   ├── javac          ← 编译器(把 .java 变成 .class)
│   ├── java           ← 运行器(执行 .class)
│   ├── javadoc        ← 文档生成器
│   ├── jar            ← 打包工具
│   ├── jdb            ← 调试器
│   └── javap          ← 反编译查看器
├── lib/               ← 类库文件
├── include/           ← C/C++ 头文件
└── jmods/             ← 模块化文件

javac和java的区别

这两个是最常用的命令,必须搞清楚!

命令作用输入输出
javac编译器.java源文件.class字节码
java运行器.class字节码程序执行结果

实际使用

# 第一步:编译(把人类能懂的源码变成 JVM 能懂的字节码)
javac Hello.java

# 第二步:运行(让 JVM 执行字节码)
java Hello

💡 避坑提醒

  • javac负责"翻译",java负责"执行"。没有javac编译的.class文件是没法运行的。
  • java 命令后面不要加 .class 后缀,直接写类名就行。写成 java Hello.class是会报错的!

JDK/JRE/JVM完整关系图

image.png

总结

概念一句话解释
JVM执行字节码的虚拟心脏,跨平台的基石
JREJVM + 核心类库,能运行但不能开发
JDKJRE + 全套开发工具,程序员吃饭的家伙

终极口诀:JVM 是内核,JRE 是运行壳,JDK 是开发全家桶。学 Java,装 JDK 一步到位!

💡 与君共勉

写这篇文章的时候,想起自学Java的过程。有几点心得想分享给你:

  1. 不要急于求成 - 学习是一个循序渐进的过程,今天的困惑都是明天的积累。
  2. 别怕折腾 - 环境崩了就重装,报错就搜,踩坑才是真学习。
  3. 多动手敲代码 - 看十遍视频不如敲一遍代码,实践出真知。
  4. 建立知识体系 - Java是一整套体系,要慢慢把知识点串起来。

如果你觉得这篇文章对你有帮助,点个赞告诉我,让我知道我的分享是有价值的。有任何疑惑,欢迎在评论区留言,我看到都会回复。