news 2026/5/16 19:28:23

Java技术体系:JDK、JRE、JVM的关系与演进(2026最新版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java技术体系:JDK、JRE、JVM的关系与演进(2026最新版)

摘要:很多Java学习者对JDK、JRE、Java SE、Java EE、Java ME这些概念傻傻分不清。本文从Java技术体系演进的角度,用一张核心架构图讲清它们的关系,附版本对比表环境配置实战高频面试题,建议收藏!


一、为什么这些概念总让人混淆?

想象你刚入职一家公司,HR给你发了以下装备:

场景给你的东西
日常办公电脑 + Office + 企业邮箱
技术开发电脑 + IDE + Git + 测试环境
外出演示平板 + PPT播放器(只能看,不能改)

Java技术体系也是类似的逻辑——不同场景,不同装备组合

但官方命名确实容易让人困惑:

  • JDKvsJRE:只差一个字母,功能差异巨大
  • SEvsEEvsME:名字像兄弟,定位完全不同
  • Java 8Java 11Java 17:版本号跳跃,和SE/EE/ME又是什么关系?

本文目标:用一张图 + 一张表,彻底理清这些概念。


二、核心架构图:Java技术体系的"俄罗斯套娃"

2.1 五者的包含关系(关键!)

核心结论:JDK ⊃ JRE ⊃ JVM

2.2 一句话定义(面试必背)

概念一句话定义类比
JVMJava虚拟机,执行字节码的"翻译官"翻译器(把.class翻译成机器码)
JREJava运行时环境 = JVM + 核心类库播放器(能看电影,不能拍电影)
JDKJava开发工具包 = JRE + 开发工具影视制作套装(能拍能剪能播)
Java SE标准版,Java技术的核心基础普通话(全国通用)
Java EE企业版,在SE基础上扩展企业级能力商务英语(特定场景专用)
Java ME微型版,面向嵌入式和移动设备方言(特定地区使用)

三、深度拆解:每个组件到底是什么?

3.1 JVM(Java Virtual Machine)

作用:让Java实现"一次编写,到处运行"的基石。

JVM的核心组成:

组件作用类比
类加载器加载.class文件到内存仓库管理员
运行时数据区堆、栈、方法区等内存区域仓库分区
执行引擎解释执行或JIT编译字节码生产线
垃圾回收器自动回收无用对象内存清洁工

不同厂商的JVM实现:

JVM实现所属公司特点
HotSpotOracle/OpenJDK最常用,JIT编译优化出色
GraalVMOracle高性能,支持多语言(Java/JS/Python…)
ZingAzul低延迟,适合金融交易系统
OpenJ9IBM/Eclipse低内存占用,适合容器化部署

面试考点:JVM是规范,HotSpot是实现。就像USB是标准,不同厂商都可以生产USB设备。

3.2 JRE(Java Runtime Environment)

作用:运行Java程序的最小环境。

JRE包含:

JRE/ ├── bin/ │ └── java ← 启动JVM的命令 │ └── keytool ← 密钥管理工具(安全相关) │ └── policytool ← 安全策略工具 ├── lib/ │ ├── rt.jar ← 运行时核心类库(Java 8及以前) │ ├── jrt-fs.jar ← 模块化运行时(Java 9+) │ └── modules ← Java 9+的模块文件 └── 其他资源文件

注意:JRE只能运行Java程序,不能开发Java程序。

实际场景:

  • 服务器部署Java应用时,只需安装JRE即可
  • 但现代趋势是直接用JDK(因为JDK包含JRE,且工具更多)

3.3 JDK(Java Development Kit)

作用:开发Java程序的完整工具包。

JDK包含的核心工具:

工具命令用途使用频率
编译器javac将.java编译为.class⭐⭐⭐⭐⭐
运行器java启动JVM运行程序⭐⭐⭐⭐⭐
文档生成javadoc根据注释生成API文档⭐⭐⭐⭐
调试器jdb命令行调试工具⭐⭐⭐
反编译器javap查看字节码结构⭐⭐⭐
打包工具jar打包为jar文件⭐⭐⭐⭐
监控工具jpsjstatjmapJVM性能监控⭐⭐⭐⭐⭐
诊断工具jcmdjhsdb故障诊断⭐⭐⭐

javac编译过程详解:

// HelloWorld.javapublicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("Hello, World!");}}
# Step 1: 编译javac HelloWorld.java# 生成 HelloWorld.class(字节码文件)# Step 2: 运行javaHelloWorld# 输出: Hello, World!

字节码验证:

# 使用javap查看字节码结构javap-cHelloWorld# 输出示例:Compiled from"HelloWorld.java"public class HelloWorld{public HelloWorld();Code:0: aload_01: invokespecial#1 // Method java/lang/Object."<init>":()V4:returnpublic static void main(java.lang.String[]);Code:0: getstatic#2 // Field java/lang/System.out:Ljava/io/PrintStream;3: ldc#3 // String Hello, World!5: invokevirtual#4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V8:return}

四、三大平台版:SE、EE、ME的演进与现状

4.1 Java SE(Standard Edition)——根基

定位:Java技术的核心,所有Java开发的基础。

Java SE包含的核心技术:

Java SE ├── 基础语言 │ ├── 数据类型、运算符、流程控制 │ ├── 面向对象(类、继承、多态、封装) │ └── 异常处理、泛型、注解 ├── 核心类库 │ ├── 集合框架(List、Map、Set、Queue) │ ├── IO/NIO(文件、网络、缓冲区) │ ├── 并发编程(Thread、Executor、Lock) │ └── 反射、动态代理 ├── 标准扩展 │ ├── JDBC(数据库访问) │ ├── JavaFX(桌面GUI,已逐渐被弃用) │ └── Swing/AWT(传统桌面GUI) └── JVM规范

Java SE版本演进(重点!):

版本发布年份重大特性LTS(长期支持)
Java 82014Lambda表达式、Stream API、新日期API
Java 112018移除JavaFX、引入ZGC、HTTP Client
Java 172021密封类、模式匹配、新Mac渲染管道
Java 212023虚拟线程(Project Loom)、序列集合
Java 232024分代ZGC、模式匹配switch、字符串模板

企业选择建议:生产环境优先选择LTS版本(8、11、17、21),非LTS版本仅用于体验新特性。

4.2 Java EE(Enterprise Edition)——企业级

定位:在Java SE基础上,构建大规模、分布式、事务性的企业应用。

Java EE核心技术栈:

Java EE(现Jakarta EE) ├── Web层技术 │ ├── Servlet ← 处理HTTP请求的核心 │ ├── JSP ← 服务器端页面渲染(已过时) │ ├── JSF ← 组件化Web框架 │ └── WebSocket ← 全双工通信 ├── 业务层技术 │ ├── EJB ← 企业JavaBean(重量级,逐渐被替代) │ ├── JPA ← Java持久化API(ORM标准) │ ├── JTA/JTS ← 事务管理 │ └── CDI ← 上下文依赖注入 ├── 消息与集成 │ ├── JMS ← Java消息服务(MQ标准) │ ├── JCA ← 连接器架构 │ └── JavaMail ← 邮件服务 └── 安全与服务 ├── JAAS ← 认证与授权 └── JAX-RS/JAX-WS ← REST/SOAP Web服务

重要历史变迁:

时间事件影响
2017Oracle将Java EE捐赠给Eclipse基金会品牌更名为Jakarta EE
2019Jakarta EE 8发布完全兼容Java EE 8
2022Jakarta EE 10发布支持Java 11+,现代化改造
现在Spring Boot成为事实标准传统Java EE逐渐式微

Spring vs Java EE:

对比项Spring/Spring Boot传统Java EE
开发模式约定优于配置大量XML配置
启动速度秒级分钟级
部署方式嵌入式Tomcat/Jetty重量级应用服务器(WebLogic/WebSphere)
学习曲线平缓陡峭
当前地位主流选择存量系统维护

结论:新手学习建议直接学Spring Boot,Java EE作为历史知识了解即可。

4.3 Java ME(Micro Edition)——嵌入式

定位:为资源受限设备(手机、机顶盒、传感器)提供Java能力。

技术特点:

特性说明
精简配置CLDC(有限连接设备配置)+ MIDP(移动信息设备简表)
小 footprint内存占用小,适合KB级内存设备
特定API针对移动设备的UI、网络、存储API

现状与替代:

Java ME 的兴衰时间线: 2000-2008 黄金时代 └── 诺基亚Symbian手机广泛支持Java ME游戏 └── "Write Once, Run Anywhere"在移动端似乎要实现 2008-2014 衰退期 └── iPhone发布,iOS原生应用崛起 └── Android发布,使用Dalvik虚拟机(非Java ME) 2014-现在 边缘化 └── Android成为移动开发绝对主流 └── Java ME仅用于部分嵌入式/物联网场景 └── 被Android、RTOS、MicroPython等技术取代

现代替代方案:

场景推荐技术
移动应用开发Android(Kotlin/Java)、iOS(Swift)
跨平台移动开发Flutter、React Native
物联网(IoT)Arduino、MicroPython、RTOS
嵌入式Linux原生C/C++、Go

五、版本关系全景图:SE/EE/ME的关系

关键理解:

  • Java SEJava EEJava ME平台规范
  • JDK 8JDK 11JDK 17具体实现版本
  • 每个平台版本都有对应的JDK版本支持

六、实战:JDK安装与环境配置

6.1 选择合适的JDK发行版

发行版提供商特点推荐场景
Oracle JDKOracle商业支持,性能优化好企业商用(需授权)
OpenJDK社区开源免费,与Oracle JDK源码基本一致开发测试、大多数生产环境
Adoptium Eclipse TemurinEclipse基金会免费、可靠、多平台构建最推荐的生产环境选择
Amazon CorrettoAWSAWS优化,长期支持AWS云环境
Alibaba Dragonwell阿里云针对阿里业务场景优化阿里云平台
Tencent Kona腾讯云针对腾讯业务场景优化腾讯云平台

个人开发者建议:使用Eclipse Temurin(免费、稳定、更新及时)。

6.2 Windows环境配置

Step 1:下载并安装JDK

从 oracle官网 下载对应版本的JDK安装包。

Step 2:配置环境变量

【新建】系统变量 JAVA_HOME

【编辑】系统变量 Path

**Step 3:验证安装** ```bash # 打开CMD,执行: java -version javac -version

6.3 Linux环境配置(CentOS/Ubuntu)

# 方式1:使用包管理器(推荐)# Ubuntu/Debiansudoaptupdatesudoaptinstallopenjdk-17-jdk# CentOS/RHELsudoyuminstalljava-17-openjdk-devel# 方式2:手动安装wgethttps://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.8_7.tar.gztar-xzfOpenJDK17U-jdk_x64_linux_hotspot_17.0.8_7.tar.gzsudomvjdk-17.0.8+7 /usr/lib/jvm/java-17# 配置环境变量echo'export JAVA_HOME=/usr/lib/jvm/java-17'|sudotee/etc/profile.d/java.shecho'export PATH=$JAVA_HOME/bin:$PATH'|sudotee-a/etc/profile.d/java.shsource/etc/profile# 验证java-version

七、高频面试题(建议背诵)

题目标准答案
JDK、JRE、JVM的区别?JVM是虚拟机,执行字节码;JRE=JVM+核心类库,是运行环境;JDK=JRE+开发工具,是开发环境。关系:JDK ⊃ JRE ⊃ JVM
为什么Java叫"平台无关"语言?因为Java源码编译为字节码(.class),字节码在JVM上运行,不同操作系统有对应的JVM实现,实现"一次编写,到处运行"
Java SE和Java EE的区别?SE是标准版,提供核心语法和类库;EE是企业版,在SE基础上扩展了Servlet、JPA、JMS等企业级技术。现在EE已更名为Jakarta EE
Java ME现在还有用吗?已基本被淘汰,移动开发被Android/iOS取代,嵌入式开发被RTOS/MicroPython取代
Java 8和Java 11的主要区别?Java 8引入Lambda和Stream;Java 11移除了JavaFX和Java EE模块,引入ZGC垃圾回收器,HTTP Client标准化。两者都是LTS版本
生产环境应该选择哪个JDK版本?优先选择LTS版本(8、11、17、21)。新项目建议Java 17或21,老项目维护用Java 8

八、总结:一张图记住所有关系

Java 技术体系 │ ┌────────────────┼────────────────┐ │ │ │ Java SE Java EE Java ME (标准版) (企业版) (微型版) │ │ │ │ Jakarta EE 已淘汰 │ (现名) │ │ │ │ └────────────────┘ │ │ │ JDK (开发工具包) │ │ │ ┌──┴──┐ │ │ │ │ JRE 开发工具 │ │ │ ┌──┴──┐ │ │ │ │ JVM 核心类库 │ │ │ ┌────┴──────┐ │ │ │ │ 类加载器 执行引擎 │ │ │ │ 运行时数据区 垃圾回收器 │

核心记忆口诀:

JVM跑字节,JRE能运行,JDK做开发,SE是基础,EE做企业,ME已淘汰。


如果觉得本文对你有帮助,欢迎点赞 👍、收藏 ⭐、评论 💬!你的支持是我持续更新的动力!

有任何问题欢迎在评论区留言,我会一一回复!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 19:23:36

智联健康·数惠产业|健康有益AI+硬件一体化健康解决方案

当前大健康产业正加速向数字化、智能化转型&#xff0c;软硬件一体化、全周期健康服务已成为行业升级核心方向。在此背景下&#xff0c;健康有益作为深耕 AI 大健康领域的科技企业&#xff0c;同时作为华为终端渠道商ISV双重伙伴&#xff0c;深度联动华为生态资源&#xff0c;…

作者头像 李华
网站建设 2026/5/16 19:23:35

VisualCppRedist AIO:一站式解决Windows DLL依赖问题的终极方案

VisualCppRedist AIO&#xff1a;一站式解决Windows DLL依赖问题的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否经常遇到"无法启动程序&a…

作者头像 李华
网站建设 2026/5/16 19:23:35

告别信号毛刺!用ADS和Sigrity搞定USB3.0 PCB仿真的保姆级流程

从S参数到眼图&#xff1a;USB3.0信号完整性仿真实战指南 当一块搭载USB3.0接口的PCB板从工厂返回&#xff0c;硬件工程师最不愿看到的就是连接测试仪时出现的信号抖动或眼图闭合。5Gbps的高速传输对PCB设计提出了严苛要求——差分对间串扰控制在-27dB以下&#xff0c;插入损耗…

作者头像 李华
网站建设 2026/5/16 19:23:17

手把手教你用STC89C52单片机驱动DS1302时钟模块(附完整代码)

STC89C52与DS1302时钟模块实战指南&#xff1a;从硬件搭建到代码实现 1. 项目概述与硬件准备 在嵌入式系统开发中&#xff0c;实时时钟(RTC)功能是许多项目的核心需求。STC89C52作为经典的51系列单片机&#xff0c;与DS1302时钟模块的组合&#xff0c;为开发者提供了经济实惠且…

作者头像 李华
网站建设 2026/5/16 19:22:26

3PEAK思瑞浦 TPA2644-SO2R SOP14 运算放大器

特性 供电电压:3V至36V 偏移电压:土2mV(最大值) 差分输入电压范围至电源轨&#xff0c;可作为比较器工作 带宽:1.5MHz&#xff0c;斜率:0.5V/us 输入轨至-Vs&#xff0c;无内部ESD二极管至Vs 低1/f噪声:在10Hz时为50nV/Hz 高PSRR:100kHz时为60dB 开机和关机电流期间无明显输出抖…

作者头像 李华
网站建设 2026/5/16 19:21:09

3分钟掌握C++高性能CSV解析:fast-cpp-csv-parser终极指南

3分钟掌握C高性能CSV解析&#xff1a;fast-cpp-csv-parser终极指南 【免费下载链接】fast-cpp-csv-parser fast-cpp-csv-parser 项目地址: https://gitcode.com/gh_mirrors/fa/fast-cpp-csv-parser 在C开发中处理CSV文件数据时&#xff0c;你是否曾为繁琐的解析代码和性…

作者头像 李华