JRockit / IBM J9 VM
两款曾经的企业级王者
在 HotSpot 成为主流之前,有两款 JVM 在企业级市场占据重要地位:JRockit 和 IBM J9。它们各自有自己的独门绝技,在某些领域甚至超过了 HotSpot。
JRockit:追求极致的性能
出身
JRockit 由 BEA Systems(后来的 Oracle)开发,2002 年发布。Oracle 收购 BEA 后,2010 年左右决定将 JRockit 的核心技术整合进 HotSpot——JIT 编译器、GC 等特性被移植到 HotSpot 中。
核心优势
JRockit 的设计哲学是:性能即一切。
它在以下几个方面的表现曾领先 HotSpot:
1. 更快启动,更强 JIT
JRockit 的 JIT 编译器比 HotSpot 的 C2 更早实现了许多激进优化技术。它的启动速度更快,运行时性能更高。
# JRockit 的启动参数风格
java -jrockit -Xgc:gencon MyApp
# gc:gencon = generational concurrent,JRockit 的招牌 GC2. 革命性的 GC:deterministic pause
JRockit 最著名的特性是 Mission Control 和 Deterministic GC。
传统 GC 的停顿是「不可预测」的——GC 什么时候开始、停多久,开发者无法精确控制。JRockit 引入了确定性停顿的概念:通过设置 gcPauseTarget,可以让 GC 停顿时间稳定在某个目标值以内。
这对金融交易系统、实时系统等对延迟敏感的场景来说,是革命性的进步。
3. JRockit Mission Control
JRockit Mission Control 是一个完整的诊断工具套件,包括:
- JRA(Java Runtime Analyzer):记录运行时的详细性能数据
- Memory Leak Detector:内存泄漏检测
- Console:实时监控
这个工具后来演变成了 Java Mission Control(JMC),被整合进 Oracle JDK,一直沿用至今。
JRockit 与 HotSpot 的融合
2010 年 Oracle 收购 BEA 后,JRockit 逐渐退出历史舞台:
JRockit JIT 编译器 ──→ 移植到 HotSpot(成为 C2 优化参考)
JRockit Mission Control ──→ 演变为 JMC,整合进 Oracle JDK
JRockit GC 思想 ──→ 影响 HotSpot 的 G1、ZGC 设计JRockit 的核心思想活在 HotSpot 的身上,这也是为什么理解 JRockit 有助于理解现代 HotSpot 的设计选择。
IBM J9:企业级可靠性的代表
出身
IBM J9 VM 由 IBM 开发,是 IBM Java SDK 的核心。它的历史可以追溯到 1997 年,IBM 是最早提供企业级 Java 支持的公司之一。
J9 不是一款通用 JVM,而是针对不同平台有多个版本:
| 平台 | J9 的用途 |
|---|---|
| AIX / Linux on Power | IBM 大型机和小机的 Java 运行时 |
| IBM i | AS/400 系统的 Java 运行时 |
| z/OS | IBM 大型机(主机)的 Java 运行时 |
| 普通 Linux / Windows | 可以在 IBM SDK 中使用 J9 替代 HotSpot |
核心优势
1. 稳定性优先
IBM J9 以稳定性著称,特别适合金融、电信、政府等对可靠性要求极高的行业。IBM 为 J9 提供了长期支持,每个版本都有多年的维护周期。
2. 丰富的 GC 选项
J9 的 GC 选择比 HotSpot 更丰富:
| GC | 说明 |
|---|---|
| gencon(默认) | 分代并发GC,适合大多数场景 |
| optthruput | 吞吐量优先,类似 Parallel GC |
| optavgpause | 停顿时间优先,类似 CMS |
| balanced | 区域化,类似 G1 |
| ** metronome** | 实时 GC,停顿时间可精确控制 |
| g1 | 兼容 G1 |
3. AOT 编译先驱
J9 在 HotSpot 之前就实现了 AOT(Ahead-Of-Time)编译。通过 jaotc 工具可以在构建时预编译热点代码,减少启动时间。
4. 更好的容器感知
J9 对容器环境(Docker/Kubernetes)的支持比早期 HotSpot 更友好。J9 能更准确地感知容器的 CPU 和内存限制,避免默认参数设置过大。
# J9 自动检测容器资源限制
# 不需要手动设置 -Xmx,J9 会根据容器限制自动调整
docker run ibmjava:java-8 java MyAppJ9 的副产品:OpenJ9
2017 年,IBM 将 J9 的核心代码开源,成立了 Eclipse OpenJ9 项目。
IBM J9(商业闭源)
↓ 开源
Eclipse OpenJ9(开源)
↓
OpenJ9 + OpenJDK = 完整的开源 JDK现在你可以下载 Semeru Runtime(IBM 维护的 OpenJ9 + OpenJDK 组合)来免费使用基于 OpenJ9 的 JDK。
# 使用 OpenJ9 的 JDK
# https://developer.ibm.com/languages/java/semeru-runtimes/
java -XshowSettings:vm -version
# VM settings:
# J9VM -- 使用 J9/OpenJ9 引擎OpenJ9 vs HotSpot:对比
| 维度 | OpenJ9 | HotSpot |
|---|---|---|
| 启动速度 | 更快(AOT 优化) | 较慢 |
| 长期运行性能 | 相当 | 相当 |
| 内存占用 | 更低 | 较高 |
| GC 调优 | 丰富 | 成熟 |
| 生态 | 较小 | 巨大 |
| 适用场景 | 容器化、微服务 | 通用 |
如果你在 Kubernetes 中跑 Java 应用,OpenJ9 是 HotSpot 的有力替代品——更低的内存占用和更快的启动速度,在容器环境中很有价值。
总结对比
| 特性 | JRockit | IBM J9 | HotSpot |
|---|---|---|---|
| 厂商 | Oracle(BEA) | IBM | Oracle / OpenJDK |
| 现状 | 已停止,独立版本 | 商业版 + OpenJ9 开源 | 绝对主流 |
| 设计理念 | 极致性能 | 稳定可靠 | 均衡全面 |
| 代表性特性 | Deterministic GC | Metronome GC、容器感知 | 分层编译、G1/ZGC |
| 生态规模 | 较小 | 中等(企业级) | 巨大 |
| 对 HotSpot 的影响 | 大量移植 | 容器感知思路 | - |
理解 JRockit 和 J9 的历史,不是为了怀旧。它们各自代表了一种设计哲学:极致性能 vs 极致稳定,这两种思路深刻影响了 HotSpot 今天的形态。
下一节,我们来看看 KVM/CDC/CLDC/Azul/Liquid VM,了解 JVM 在移动端和特殊场景下的应用。
