)
摘要很多Java学习者对JDK、JRE、Java SE、Java EE、Java ME这些概念傻傻分不清。本文从Java技术体系演进的角度用一张核心架构图讲清它们的关系附版本对比表、环境配置实战和高频面试题建议收藏一、为什么这些概念总让人混淆想象你刚入职一家公司HR给你发了以下装备场景给你的东西日常办公电脑 Office 企业邮箱技术开发电脑 IDE Git 测试环境外出演示平板 PPT播放器只能看不能改Java技术体系也是类似的逻辑——不同场景不同装备组合。但官方命名确实容易让人困惑JDKvsJRE只差一个字母功能差异巨大SEvsEEvsME名字像兄弟定位完全不同Java 8、Java 11、Java 17版本号跳跃和SE/EE/ME又是什么关系本文目标用一张图 一张表彻底理清这些概念。二、核心架构图Java技术体系的俄罗斯套娃2.1 五者的包含关系关键核心结论JDK ⊃ JRE ⊃ JVM2.2 一句话定义面试必背概念一句话定义类比JVMJava虚拟机执行字节码的翻译官翻译器把.class翻译成机器码JREJava运行时环境 JVM 核心类库播放器能看电影不能拍电影JDKJava开发工具包 JRE 开发工具影视制作套装能拍能剪能播Java SE标准版Java技术的核心基础普通话全国通用Java EE企业版在SE基础上扩展企业级能力商务英语特定场景专用Java ME微型版面向嵌入式和移动设备方言特定地区使用三、深度拆解每个组件到底是什么3.1 JVMJava Virtual Machine作用让Java实现一次编写到处运行的基石。JVM的核心组成组件作用类比类加载器加载.class文件到内存仓库管理员运行时数据区堆、栈、方法区等内存区域仓库分区执行引擎解释执行或JIT编译字节码生产线垃圾回收器自动回收无用对象内存清洁工不同厂商的JVM实现JVM实现所属公司特点HotSpotOracle/OpenJDK最常用JIT编译优化出色GraalVMOracle高性能支持多语言Java/JS/Python…ZingAzul低延迟适合金融交易系统OpenJ9IBM/Eclipse低内存占用适合容器化部署面试考点JVM是规范HotSpot是实现。就像USB是标准不同厂商都可以生产USB设备。3.2 JREJava 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 JDKJava Development Kit作用开发Java程序的完整工具包。JDK包含的核心工具工具命令用途使用频率编译器javac将.java编译为.class⭐⭐⭐⭐⭐运行器java启动JVM运行程序⭐⭐⭐⭐⭐文档生成javadoc根据注释生成API文档⭐⭐⭐⭐调试器jdb命令行调试工具⭐⭐⭐反编译器javap查看字节码结构⭐⭐⭐打包工具jar打包为jar文件⭐⭐⭐⭐监控工具jps、jstat、jmapJVM性能监控⭐⭐⭐⭐⭐诊断工具jcmd、jhsdb故障诊断⭐⭐⭐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 fromHelloWorld.javapublic 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 SEStandard 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 EEEnterprise Edition——企业级定位在Java SE基础上构建大规模、分布式、事务性的企业应用。Java EE核心技术栈Java EE现Jakarta EE ├── Web层技术 │ ├── Servlet ← 处理HTTP请求的核心 │ ├── JSP ← 服务器端页面渲染已过时 │ ├── JSF ← 组件化Web框架 │ └── WebSocket ← 全双工通信 ├── 业务层技术 │ ├── EJB ← 企业JavaBean重量级逐渐被替代 │ ├── JPA ← Java持久化APIORM标准 │ ├── JTA/JTS ← 事务管理 │ └── CDI ← 上下文依赖注入 ├── 消息与集成 │ ├── JMS ← Java消息服务MQ标准 │ ├── JCA ← 连接器架构 │ └── JavaMail ← 邮件服务 └── 安全与服务 ├── JAAS ← 认证与授权 └── JAX-RS/JAX-WS ← REST/SOAP Web服务重要历史变迁时间事件影响2017Oracle将Java EE捐赠给Eclipse基金会品牌更名为Jakarta EE2019Jakarta EE 8发布完全兼容Java EE 82022Jakarta EE 10发布支持Java 11现代化改造现在Spring Boot成为事实标准传统Java EE逐渐式微Spring vs Java EE对比项Spring/Spring Boot传统Java EE开发模式约定优于配置大量XML配置启动速度秒级分钟级部署方式嵌入式Tomcat/Jetty重量级应用服务器WebLogic/WebSphere学习曲线平缓陡峭当前地位主流选择存量系统维护结论新手学习建议直接学Spring BootJava EE作为历史知识了解即可。4.3 Java MEMicro 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等技术取代现代替代方案场景推荐技术移动应用开发AndroidKotlin/Java、iOSSwift跨平台移动开发Flutter、React Native物联网IoTArduino、MicroPython、RTOS嵌入式Linux原生C/C、Go五、版本关系全景图SE/EE/ME的关系关键理解Java SE、Java EE、Java ME是平台规范JDK 8、JDK 11、JDK 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 -version6.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.87 /usr/lib/jvm/java-17# 配置环境变量echoexport JAVA_HOME/usr/lib/jvm/java-17|sudotee/etc/profile.d/java.shechoexport PATH$JAVA_HOME/bin:$PATH|sudotee-a/etc/profile.d/java.shsource/etc/profile# 验证java-version七、高频面试题建议背诵题目标准答案JDK、JRE、JVM的区别JVM是虚拟机执行字节码JREJVM核心类库是运行环境JDKJRE开发工具是开发环境。关系JDK ⊃ JRE ⊃ JVM为什么Java叫平台无关语言因为Java源码编译为字节码.class字节码在JVM上运行不同操作系统有对应的JVM实现实现一次编写到处运行Java SE和Java EE的区别SE是标准版提供核心语法和类库EE是企业版在SE基础上扩展了Servlet、JPA、JMS等企业级技术。现在EE已更名为Jakarta EEJava ME现在还有用吗已基本被淘汰移动开发被Android/iOS取代嵌入式开发被RTOS/MicroPython取代Java 8和Java 11的主要区别Java 8引入Lambda和StreamJava 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已淘汰。如果觉得本文对你有帮助欢迎点赞 、收藏 ⭐、评论 你的支持是我持续更新的动力有任何问题欢迎在评论区留言我会一一回复