面對 CLDC、CDC、MIDP、KVM、PersonalJava 等術語的迷霧,本文從宏觀架構與歷史演進兩個維度,建立清晰的 J2ME 知識地圖。
| CLDC | CDC | |
|---|---|---|
| 目標裝置 | 手持、電池供電、間歇網路 (手機、PDA、呼叫器) | 固定、外接電源、持續網路 (機頂盒、車載、智能家電) |
| 記憶體 | 128KB ~ 512KB | > 512KB (通常 MB 級) |
| 處理器 | 16/32-bit, ~16MHz | 32/64-bit |
| 虛擬機 | KVM (Kilobyte VM, ~100KB) | CVM (Compact VM, 完整 JVM 子集) |
| 核心類庫 | java.lang/io/util 精簡子集 + javax.microedition.io | J2SE 1.3 子集 + CLDC 全部 + float/double/RMI/反射/JNI |
| 缺失特性 | float/double、finalize、弱引用、RMI、反射、AWT/Swing、類載入器、檔案系統 | 幾乎無缺失 (完整 Java SE 子集) |
| Profile | 基礎 Configuration | 目標領域 | 核心功能 |
|---|---|---|---|
| MIDP | CLDC | 手機、雙向傳呼器 | 高/低階 UI、RMS、HTTP、Timer、GameCanvas |
| PDA Profile | CLDC | Palm/Handspring PDA | AWT 子集 UI、資料庫、取代 kJava |
| Foundation Profile | CDC | 無 GUI 的網路裝置 | 完整網路、無 UI、其他 CDC Profile 基礎 |
| Personal Basis Profile | CDC | 簡易 GUI 裝置 | Foundation + AWT 輕量 UI |
| Personal Profile | CDC | 豐富 GUI 裝置 | PBP + 完整 AWT、Applet 支援、取代 PersonalJava |
| RMI Profile | CDC | 分散式嵌入式系統 | Foundation + Java RMI |
JavaCodeCompact (預連結/預載入類別進 VM)、JAM (Java Application Manager,OTA 安裝/更新/回滾)J2SE 載入類別時執行 Bytecode Verifier(耗時)。CLDC/MIDP 要求開發階段在 PC 執行 preverify,在 class 檔標記驗證結果,裝置端驗證器大幅簡化,加快啟動。
CLDC 統一連線介面:Connector.open("protocol://address")
// 統一 API 建立五種連線
Connector.open("https://host/file"); // HTTP
Connector.open("socket://host:port"); // TCP Socket
Connector.open("datagram://host:port"); // UDP Datagram
Connector.open("comm:0;baudrate=9600"); // 序列埠
Connector.open("file:/path"); // 檔案 (裝置支援時)
「跨平台投資報酬率最高」。面對 PalmOS、WinCE、EPOC、Embedded Linux、@ViS 等五大以上平台,Java 單一代碼庫配合各廠商 JVM 實現「Write Once, Run Anywhere」。效能隨專用 CPU (ARM Jazelle 等) 與預先驗證技術大幅提升,已非瓶頸。