Skip to content

KVM / CDC / CLDC / Azul / Liquid VM

JVM 的多样性世界

除了桌面和服务器,JVM 还运行在很多你可能想不到的地方:手机、微波炉、汽车电子……这一节来看看那些「非主流」但同样重要的 JVM 实现。

KVM:Java ME 的心脏

什么是 Java ME

Java ME(Micro Edition)是 Java 的微缩版,专门为嵌入式和移动设备设计(功能机时代的塞班、i-mode 手机,以及机顶盒、汽车导航等)。

Java ME 有两套配置(Configuration):

配置全称目标设备内存
CLDCConnected Limited Device Configuration功能手机、嵌入式设备160KB~512KB
CDCConnected Device Configuration智能家电、汽车系统2MB+

KVM(Kilobyte Virtual Machine)就是 CLDC 的参考实现——它是 Java ME 里最轻量级的虚拟机。

KVM 的设计约束

KVM 面对的设备条件极为苛刻:

  • 几十 KB 的内存(HotSpot 需要几 MB)
  • 没有文件系统,只有网络连接
  • 没有本地 GUI 支持
  • 电池供电,CPU 性能弱

为此 KVM 做了极致的裁剪:

java
// 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 过程中几乎不需要停顿

bash
# Azul Zing 的启动方式
zing-jdk/bin/java -XX:+UseZing -Xmx64g MyApp
# Zing 的 GC 参数
zing-jdk/bin/java -XX:+UseZing -XX:ZingGCInterval=50 -XX:ZingPauseTarget=10ms MyApp

C4 的核心技术:

  • 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 带来了几个直接好处:

  1. 启动速度极快:不需要启动整个操作系统
  2. 内存占用更低:省去了操作系统本身的开销
  3. GC 停顿更稳定:没有其他进程干扰

结局

Liquid VM 随 JRockit 一起被 Oracle 收购,后来随着 JRockit 停止独立开发而退出历史舞台。它的核心技术理念——虚拟机即操作系统——在 Docker 容器时代重新焕发生机(Docker 容器本质上是共享内核的轻量级隔离,和 Liquid VM 的思路有相似之处)。

总结一览

虚拟机场景特点现状
KVMJava ME / 功能手机极致轻量(几十 KB)被 Android 取代
CVM智能设备 / 机顶盒轻量但功能更全边缘使用
CLDC/CDCJava ME 规范不是 VM,是配置规范已淘汰
Azul Zing金融 / 实时 / 低延迟C4 无暂停 GC商业产品
Liquid VM高性能服务器JVM 直接做 OS已停止

理解这些特殊场景的 JVM,有助于理解 JVM 生态的广度——JVM 不仅仅是运行服务器应用,它是一个通用的运行时平台。

下一节,我们来看看 Apache Harmony / Microsoft / TaobaoJVM,了解那些国产力量和历史过客。

基于 VitePress 构建