J2ME (Java 2 Micro Edition) 是 Java 2 平台的三大版本之一,與 J2SE (Standard)、J2EE (Enterprise) 齊名。Sun 官方定義:「高度優化的 Java 運行環境,針對消費性電子設備:蜂窩電話、PDA、機頂盒、車載導航等。」 1999 年 JavaOne 大會正式發布,核心目標:將 Java「一次編寫,到處運行」特性帶入資源受限嵌入式裝置。
「對於各種不同的裝置而造出一個單一的開發系統是沒有意義的事。」
嵌入式裝置差異極大:
| 維度 | 低階裝置 (手機、PDA) | 高階裝置 (機頂盒、車載、智能家電) | |||
|---|---|---|---|---|---|
| 運算能力 | 極低 (MHz 級 CPU、無 FPU) | 較強 (百 MHz+、可能有 FPU) | |||
| 記憶體 | 128KB-2MB RAM/ROM | 2MB-32MB+ | |||
| 電源 | 電池供電、極嚴格功耗控制 | 市電/車載電、相對寬裕 | |||
| 顯示 | 小螢幕、單色/低色深 | TV 輸出、高解析度、彩色 | |||
| 網絡 | 間歇性、高延遲、GPRS/CSD | 持續連線、乙太網/有線寬頻 |
| Configuration | 全稱 | 目標裝置 | 核心類庫 | 擴展類庫 | VM 特性 |
|---|---|---|---|---|---|
| CLDC | Connected Limited Device Configuration | 手機、PDA、雙向傳呼機 | java.lang.* (子集) java.io.* (子集) java.util.* (子集) | javax.microedition.io.* | KVM (Kilobyte VM) 無浮點、無 finalization、 無 JNI、無使用者定義類載入器 |
| CDC | Connected Device Configuration | 機頂盒、車載、智能家電、醫療設備 | 幾乎完整 J2SE 核心庫 | javax.microedition.io.* + 更多標準擴展 | CVM (Compact VM) 支援浮點、JNI、完整反射、 類載入器、最終化 |
關鍵點:CLDC 1.0 無浮點運算(整數模擬),CLDC 1.1 新增浮點支援。CDC 基本相當於精簡版 J2SE。
建立在 Configuration 之上,提供特定領域 API:UI、持久化、網絡、多媒體
| 基礎 Configuration | Profile | 全稱 | 核心 API 套件 | 典型裝置 |
|---|---|---|---|---|
| CLDC | MIDP | Mobile Information Device Profile | javax.microedition.lcdui (高層/低層 UI) javax.microedition.rms (RMS 持久化) javax.microedition.midlet (MIDlet 生命周期) javax.microedition.media (MMAPI 多媒體) | 手機、PDA (主流 J2ME 開發目標) |
| IMP | Information Module Profile | 針對無顯示/簡單顯示的嵌入式模組 (如自動販賣機、傳感器節點) | 工業控制、M2M 設備 | |
| CDC | Foundation | Foundation Profile | CDC 核心 + 基礎網絡/安全/管理 API | 高階嵌入式通用基座 |
| Personal Basis | Personal Basis Profile | Foundation + AWT 精簡版 (輕量 UI) | 機頂盒、車載導航 | |
| Personal | Personal Profile | Personal Basis + 完整 AWT + Applet 支援 | 高效能嵌入式、瘦客戶機 |
MIDP 版本演進:MIDP 1.0 (基礎 UI/RMS) → MIDP 2.0 (GameCanvas、MMAPI、WMA、PushRegistry、HTTPS、信任域) → MIDP 3.0 (JSR 271,多任務、豐富 UI、服務發現) —— 但廣泛部署仍以 MIDP 2.0/CLDC 1.1 為主。
獨立於 Configuration/Profile,按需引入:
| JSR | 名稱 | 功能領域 | 適用配置 |
|---|---|---|---|
| JSR 75 | PDA Optional Packages (PIM/FileConnection) | 通訊錄/行程表/檔案系統存取 | CLDC/MIDP |
| JSR 82 | Bluetooth API (JABWT) | 藍牙通訊、服務發現、L2CAP/RFCOMM/OBEX | CLDC/MIDP |
| JSR 135 | Mobile Media API (MMAPI) | 音訊/視訊播放錄製、MIDI、音效控制 | CLDC/MIDP |
| JSR 172 | Web Services API (JAX-RPC/SAAJ subset) | SOAP/HTTP 呼叫 Web Service、XML 解析 | CLDC/MIDP |
| JSR 177 | SATSA (Security and Trust Services API) | 加密、簽名、金鑰管理、智慧卡存取 (APDU/JCRMI/PKI) | CLDC/MIDP |
| JSR 179 | Location API (LAPI) | GPS/基地台/定位、地標、路徑 | CLDC/MIDP |
| JSR 184 | Mobile 3D Graphics (M3G) | 3D 場景圖、網格、動畫、材質、光照 | CLDC/MIDP |
| JSR 205 | WMA 2.0 (Wireless Messaging API) | SMS/CBS/MMS 收發、多部分訊息 | CLDC/MIDP |
| JSR 211 | Content Handler API (CHAPI) | 內容類型關聯、應用啟動傳遞資料 | CLDC/MIDP |
| JSR 226 | Scalable 2D Vector Graphics (SVG Tiny) | SVG 向量圖渲染、動畫、腳本 | CLDC/MIDP |
| JSR 234 | Advanced Multimedia Supplements (AMMS) | 3D 音訊、音效處理、MIDI 控制、攝像頭控制 | CLDC/MIDP |
| JSR 238 | Mobile Internationalization API | 多語言、地區格式、複雜文字佈局 | CLDC/MIDP |
| JSR 248 | Mobile Sensor API | 加速度計、指南針、壓力、溫度等感測器 | CLDC/MIDP |
| JSR 256 | Mobile Sensor API 2.0 | 增強感測器支援、數據過濾、融合 | CLDC/MIDP |
| JSR 257 | Contactless Communication API (NFC) | NFC 標籤讀寫、P2P、卡模擬 | CLDC/MIDP |
| JSR 268 | Mobile Broadcast Service API | DVB-H/ISDB-T/媒體廣播服務 | CLDC/MIDP |
| 維度 | J2SE | J2EE | J2ME |
|---|---|---|---|
| 目標 | 桌面/伺服器通用 | 企業級分散式系統 | 資源受限嵌入式/行動裝置 |
| 運行環境 | JRE (完整) | Application Server + JRE | KVM/CVM + Profile 實現 |
| 核心類庫 | 完整 rt.jar | J2SE + 企業 API (EJB/JMS/JTA...) | 核心子集 + Profile API |
| 記憶體 | MB~GB | GB+ | KB~MB |
| 部署單元 | .jar / .exe | .ear / .war / .jar | .jar + .jad (OTA) |
| 生命周期 | main() 線程 | 容器管理 (Servlet/EJB 生命周期) | MIDlet 生命周期 (AMS 管理) |
J2ME 曾佔據全球手機應用 90%+ 市佔 (2003-2009),孕育了《貪食蛇》、《愤怒的小鳥》早期版本、Opera Mini、Google Maps Mobile、無數銀行/支付/即時通訊客戶端。2007 年 iPhone、2008 年 Android 發布後迅速邊緣化。
遺產:
- Profile/Configuration 模組化架構 → Android 模組化、OSGi、Java 9 JPMS (Jigsaw) 的思想源頭
- 受限資源工程實踐:ProGuard、AOT 編譯、定點數運算、對象池、二進制協議 — 直接傳承至 Android ART、iOS、IoT、WebAssembly
- OTA 部署模型:JAD/JAR → 現代 App Store/Play Store/微信小程序分包下載的鼻祖
- 安全沙箱:MIDlet 信任域、簽名驗證 → Android 權限模型、iOS Sandbox
J2ME 不僅是一段歷史,更是「在極致約束下實現通用計算」的經典案例。其三層架構體現了軟體工程中「分離關注點、分層抽象、標準化介面」的最高原則。研讀 J2ME 規格與實踐,能讓現代開發者在面對邊緣計算、嵌入式 AI、WebAssembly、微服務拆分等新挑戰時,擁有更深厚的架構直覺與工程智慧。