前言
J2ME 架構由「配置 + Profile + VM + 主機 OS」組成。配置層定義了最小類庫與 VM 要求,是理解 J2ME 分層的鑰匙。本文深度解析 CLDC 與 CDC 兩大配置的設計哲學、技術細節與適用邊界。
配置層定位
- 運行於 VM 之上,但與特定 VM 緊密綁定 (CLDC↔KVM, CDC↔CVM)。
- 不隸屬於單一 VM 實現,可移植至符合規範的其他 VM。
- 規範內容:I/O、網絡、安全、國際化、核心類庫子集。
- **不包含**:UI、事件處理、應用生命週期 —— 由 Profile 定義 (如 MIDP)。
CLDC (Connected Limited Device Configuration)
目標設備
- 內存 160-512KB (含 VM+類庫),典型 128KB 給 KVM+庫。
- 16/32 位微控制器,電池供電,間歇性無線連接。
- 例子:早期功能機、傳呼機、PDA、嵌入式感測節點。
KVM (Kilobyte Virtual Machine)
- 高度優化、專為資源受限設計的 JVM 實現。
- 解釋執行,無 JIT,代碼足跡極小 (~50-100KB)。
- 支援子集 Java 語言:無浮點、無 finalize()、有限異常處理、無 JNI、無用戶定義類加載器。
核心類庫 (從 J2SE 精簡 + 新增)
java.lang、java.util (無 Collections 框架,僅 Vector/Hashtab/Enumeration)、java.io (無物件序列化)、javax.microedition.io (GCF 連接框架)。
- 新增:
javax.microedition.pki、javax.microedition.security。
CLDC HotSpot Implementation VM
- 針對 CLDC 1.0 規範的**高性能 VM 替代品** (32 位、含 JIT)。
- 同等內存足跡下性能比 KVM **高一個數量級**。
- 適用於較高端 CLDC 設備 (如早期智能手機、車載系統)。
CDC (Connected Device Configuration)
目標設備
- 內存 **≥2MB**,較強 CPU (ARM9/ARM11、MIPS、x86)。
- 間歇性無線連接,但有能力運行完整 Java SE 子集。
- 例子:高端 PDA、車載信息系統、工業控制終端、早期智能手機 (Symbian/WinCE/Linux 上跑 CDC)。
CVM (C Virtual Machine)
- **功能完整的 JVM**:支援 Java 2 v1.3 所有特性 (安全管理器、JNI、JVMDI、RMI、弱引用、完整異常、finalize)。
- 本質上等同於桌面 JVM 的嵌入式版本。
Foundation Profile
- CDC 之上的最小 Profile,提供 J2SE 核心包子集 (
java.lang, java.util, java.io, java.net, java.text, java.security 等)。
- CDC + Foundation Profile = 完整 J2ME CDC 環境。
兼容性
- CDC 是 CLDC 的**超集** (向上兼容) —— CLDC 代碼無修改可在 CDC 上運行。
- 完整兼容 PersonalJava 1.1/1.2 規範應用遷移。
CLDC vs CDC 核心對比
| 維度 | CLDC | CDC |
| 內存下限 | 160KB | 2MB |
| CPU | 16/32 位微控制器 | 32 位嵌入式處理器+ |
| VM | KVM (解釋) / CLDC HotSpot (JIT) | CVM (完整 JVM) |
| 浮點 | 1.0 無 / 1.1 有 | 完整支援 |
| finalize | 無 | 有 |
| JNI | 無 | 有 |
| RMI | 無 | 有 |
| 類加載器 | 僅系統 | 用戶可定義 |
| 典型 Profile | MIDP | Foundation, Personal Basis, Personal |
| 應用場景 | 大眾功能機、低端嵌入式 | 高端 PDA、工業終端、車載、早期智能機 |
總結
配置層是 J2ME「按需裁剪、分層複用」架構的基石。CLDC 以極致精簡征服億萬功能機;CDC 以完整語義支撐高端嵌入式。理解兩者邊界,能指導你:選擇合適的目標平台、預判 API 可用性、設計可遷移的代碼結構 (核心邏輯只依賴 CLDC 子集,UI/網絡隔離在 Profile 層)。