前言
本文落笔于 2025-08-19, 其实并不建议初学者阅读, 主要写给已经踏入 Java 研发生涯的人们, 身为研发人员, 我们应该了解的一些最基本的东西:
- Java 是如何开源的?
- OpenJDK 是什么?
- JavaSE 和 EE 是什么?
- JDK 发行版有哪些?
- JDK 发行版的选型?
1) Java 开源方式, OpenJDK, SE 和 EE
Java 作为一门偏商业语言, 能够发展至今依旧强盛的原因, 离不开开源和社区, 同时也因为 Java 的开源模式及其特殊, 这套模式由商业公司主导制定规范, 且由社区共同完善, 可以既保持稳定以及开源.
Java 的开源方式是怎么样的?
JavaSE(Standard Edition):
- 标准制定: 目前由 Oracle 主导, 联合 Azul/Eclipse/RedHat/SAPSE 发布, 通过 JCP 发布标准 JSR, 如最新的 LTS 版本 JavaSE25 → JSR400.
- 参考实现: Oracle 基于 OpenJDK 仓库基础上, 基于标准, 提交初始的代码实现.
- 社区参与完善: Oracle 及大厂和社区会参与, 并将参考实现完善.
- 可以参考 https://www.jcp.org/ja/home/index 了解到每个 JavaSE 版本标准的制定流程以及落地标准本身.
JavaEE/Jakarta(Enterprise Edition): 2017 年前流程与上述 SE 保持一致由 Oracle 主导, 17 年交给 Eclipse 改由社区管理, 改名为 JakartaEE, 标准和参考实现都由社区主导制定. https://jakarta.ee
OpenJDK 项目是什么?
OpenJDK 是 JavaSE 规范的官方参考实现, 即 https://github.com/openjdk/jdk, 但是该项目并不直接提供二进制包, 像 Temurin, Zulu 都是基于其的二进制发行版.
JavaSE 和 JakartaEE 是什么关系?
JavaSE: JavaSE 是 Java 的基础核心 API, JVM 发行版都基于其进行实现.
JakartaEE: JakartaEE 是在 JavaSE 基础上, 再扩展了一套 EE 标准和 API, 包含内容较多如: Servlet, WebSocket, JPA, JDBC, JMS, EJB 等. 相应的也有对应的实现如: Tomcat, WebLogic, SpringDataJPA, ActiveMQ 等.
2) Java SE
2.1) JavaSE 历史重要节点
- 1995: Java JDK1.0 发布.
- 2006-2007: Java 开源, OpenJDK 项目启动并发布 1.0, 社区开始逐渐发展.
- 2009: Oracle 收购 Sun, Oracle 接管 JDK 的开发与发布, 包括 OpenJDK 和闭源官方 JDK.
- 2017: Oracle 政策收紧, 改变授权模式, 推动了社区和大厂发起 AdoptOpenJDK 项目, 提供 Free OpenJDK 标准实现替代 Oracle JDK.
- 2019: Oracle GraalVM 发布, CE 开源, EE 闭源.
- AOT模式: 编译 Native Binary.
- JIT模式: 支持跨语言桥接, Py/JS/Ruby 等.
- 2021: AdoptOpenJDK 项目迁移至 Eclipse 基金会, 改名 Adoptium Temurin.
2.2) JVM 实现
JVM 的实现分类:
- HotSpot: 官方提供的标准实现, 目前主流.
- OpenJ9: 小内存占用实现, 用抠门存储设计来实现的, 个人认为更适合云计算方向.
- GraalVM: 官方新项目, 特点是可编译 Native 包, 跨语言桥接。
主流开源 JDK 发行版及特点:
- 行业标准化发行版
- Eclipse Adoptium Temurin(AdoptOpenJDK): 21 年更名.
- BellSoft Liberica: 带 JavaFX.
- Azul Zulu
- Amazon Corretto
- 扩展实现发行版
- Eclipse OpenJ9: 低内存占用
- Oracle GraalVM CE: AOT, Native.
- Alibaba Dragonwell: 低版本 JDK 上实现 Wisp 协程.
主流商业闭源 JDK 发行版列表:
- Azul Prime: "世界最快JVM", 仅支持 Linux.
- ReadyNow: 持久化统计热点, 解决 JIT 预热问题, 让应用跑起来就是最快速度.
- C4 GC: 大堆, 全堆全代, 几乎零暂停, 因为拥有 连续并发压缩 专利导致社区只有 ZGC/Shenandoah 规避专利的实现.
- Oracle JDK: 标准兼容强, 全平台支持.
- Oracle GraalVM EE: GraalVM 闭源版, AOT.
- IBM Semeru: 基于 OpenJ9 低内存占用, IBM 生态配套.
2.3) JVM 选型
研发环境:
- Temurin: 一般用 Temurin 即可, 最标准的实现.
- Zulu: 如果生产用 Azul, 就用同厂 Zulu.
- OpenJ9: 研发人员机器内存不够使用 😂.
生产环境:
- 没钱: Zulu, 免费, 有补丁, LTS 长期支持.
- 有钱且追求速度: Azul Prime, 没啥好说的, 专利保护, 世界最强.
- C4 GC: 连续并发压缩.
- ReadyNow: 采集生成热点数据 Profile
- 容器化环境最佳实践: 生产采集 → 上传集中存储 → CI/CD 集成 → 新版本启动即热身完成