KVM / CDC / CLDC / Azul / Liquid VM
JVM 的多样性世界
除了桌面和服务器,JVM 还运行在很多你可能想不到的地方:手机、微波炉、汽车电子……这一节来看看那些「非主流」但同样重要的 JVM 实现。
KVM:Java ME 的心脏
什么是 Java ME
Java ME(Micro Edition)是 Java 的微缩版,专门为嵌入式和移动设备设计(功能机时代的塞班、i-mode 手机,以及机顶盒、汽车导航等)。
Java ME 有两套配置(Configuration):
| 配置 | 全称 | 目标设备 | 内存 |
|---|---|---|---|
| CLDC | Connected Limited Device Configuration | 功能手机、嵌入式设备 | 160KB~512KB |
| CDC | Connected Device Configuration | 智能家电、汽车系统 | 2MB+ |
而 KVM(Kilobyte Virtual Machine)就是 CLDC 的参考实现——它是 Java ME 里最轻量级的虚拟机。
KVM 的设计约束
KVM 面对的设备条件极为苛刻:
- 几十 KB 的内存(HotSpot 需要几 MB)
- 没有文件系统,只有网络连接
- 没有本地 GUI 支持
- 电池供电,CPU 性能弱
为此 KVM 做了极致的裁剪:
// HotSpot 能做的事,KVM 不能做
public class UnsupportedInKVM {
// KVM 不支持:
// - floating point 运算(很多嵌入式芯片没有 FPU)
// -JNI(没有本地代码空间)
// -反射(太耗资源)
// -类加载器(预验证的类直接安装到设备)
// -多线程(一些 KVM 实现支持,但很受限)
}KVM 的影响
KVM 虽然早已被 Android 取代,但它验证了一个重要理念:JVM 可以在极低的资源下运行。这个理念后来被 Android 的 Dalvik 和 ART 继承。
CLDC / CDC:设备配置的规范
CLDC 和 CDC 不是虚拟机本身,而是规范——定义了设备应该支持哪些 Java 特性。KVM 是 CLDC 规范的一个实现。
Java ME Platform
│
├── CDC(Connected Device Configuration)
│ └── 参考实现:CVM(Compact Virtual Machine)
│ └── 目标:智能设备(2MB+ 内存)
│
└── CLDC(Connected Limited Device Configuration)
└── 参考实现:KVM(Kilobyte Virtual Machine)
└── 目标:功能手机、嵌入式(160KB~512KB)CVM:CDC 的参考实现
CVM(C Virtual Machine)是 CDC 的参考实现,功能比 KVM 丰富,但仍然比 HotSpot 轻量。
CVM 支持:
- 多线程
- 完整的异常处理
- JIT 编译器(可选)
- 部分 JNI
它的设计目标是为机顶盒、数字电视、汽车导航系统等设备提供 Java 运行时。
Azul Zing:GC 停顿的终极克星
Azul 的故事
Azul Systems 是一家成立于 2002 年的公司,专注于极低停顿时间的 GC。他们的 Zing JVM 是 Azul 的商业产品。
C4 垃圾回收器
Azul 的招牌技术是 C4(Continuously Concurrent Compacting Collector)——无暂停并发压缩垃圾回收器。
HotSpot 的 G1 和 ZGC 已经能做到亚秒级停顿,但 C4 更进一步:GC 过程中几乎不需要停顿。
# Azul Zing 的启动方式
zing-jdk/bin/java -XX:+UseZing -Xmx64g MyApp
# Zing 的 GC 参数
zing-jdk/bin/java -XX:+UseZing -XX:ZingGCInterval=50 -XX:ZingPauseTarget=10ms MyAppC4 的核心技术:
- Load Barrier:在读写对象引用时插入检查,确保 GC 和应用并发运行
- 不分代:C4 不会把堆分成年轻代/老年代,而是一次处理整个堆
- 并发压缩:GC 线程和用户线程并发运行,对象移动时不会 Stop-The-World
Zing 的适用场景
Zing 适合那些对停顿时间有严苛要求的场景:
- 金融交易系统:延迟抖动会导致交易损失
- 实时系统:雷达、声呐、医疗设备
- 在线游戏服务器:玩家的每一次操作都需要确定性的响应时间
不过 Zing 是商业软件,需要付费授权。
BEA Liquid VM:史上最快的启动速度
概念
BEA(就是开发 JRockit 的那家公司)在 2004 年提出了一个激进的想法:把 JVM 做成操作系统。
这就是 Liquid VM(后来也叫 JRockit Virtual Edition)。
工作原理
传统虚拟化:硬件 → 宿主机操作系统 → 虚拟机管理器(VMware) → Guest OS → JVM → 应用
Liquid VM:硬件 → 虚拟机管理器 → JVM(直接运行,不需要 Guest OS)
传统架构:
硬件 → 操作系统 → 虚拟机管理器 → 操作系统 → JVM → 应用
Liquid VM:
硬件 → 虚拟机管理器 → JVM → 应用(去掉了一层 Guest OS)优势
去掉 Guest OS 带来了几个直接好处:
- 启动速度极快:不需要启动整个操作系统
- 内存占用更低:省去了操作系统本身的开销
- GC 停顿更稳定:没有其他进程干扰
结局
Liquid VM 随 JRockit 一起被 Oracle 收购,后来随着 JRockit 停止独立开发而退出历史舞台。它的核心技术理念——虚拟机即操作系统——在 Docker 容器时代重新焕发生机(Docker 容器本质上是共享内核的轻量级隔离,和 Liquid VM 的思路有相似之处)。
总结一览
| 虚拟机 | 场景 | 特点 | 现状 |
|---|---|---|---|
| KVM | Java ME / 功能手机 | 极致轻量(几十 KB) | 被 Android 取代 |
| CVM | 智能设备 / 机顶盒 | 轻量但功能更全 | 边缘使用 |
| CLDC/CDC | Java ME 规范 | 不是 VM,是配置规范 | 已淘汰 |
| Azul Zing | 金融 / 实时 / 低延迟 | C4 无暂停 GC | 商业产品 |
| Liquid VM | 高性能服务器 | JVM 直接做 OS | 已停止 |
理解这些特殊场景的 JVM,有助于理解 JVM 生态的广度——JVM 不仅仅是运行服务器应用,它是一个通用的运行时平台。
下一节,我们来看看 Apache Harmony / Microsoft / TaobaoJVM,了解那些国产力量和历史过客。
