J2ME(Java 2 Micro Edition)專為資源受限的行動裝置設計。初學者常對其核心概念理解不足,導致開發時記憶體溢出、效能低落。本文深度剖析三大基石:記憶體分類、CLDC 配置、MIDP 概要檔。
MIDP 裝置記憶體極其有限(通常總計幾百 KB),分區機制決定了應用的生存空間:
| 分區 | 用途 | 特性與限制 | 優化策略 |
|---|---|---|---|
| Programme Memory (程式記憶體) |
儲存 MIDlet Suite (JAR 檔) | 廠商常設上限(如 Nokia 6108 僅 64KB),超過無法安裝 | 使用 ProGuard 混淆壓縮、移除未用代碼、資源檔外置 |
| Heap (堆積區) | 執行期物件、區域/成員變數 | 通常幾十~幾百 KB,極易 OOM | 物件池複用、避免大物件、及時釋放引用、弱引用快取 |
| Persistent Storage (持久儲存區) |
RMS (Record Management System) 本地資料 | 非易失性、較大空間、讀寫較慢 | 序列化壓縮、分頁讀取、關鍵資料備份 |
Runtime.getRuntime().freeMemory() 定期檢查,預留安全閾值startApp() 建立、destroyApp() 釋放,避免記憶體洩漏Connected Limited Device Configuration (CLDC) 定義了 J2ME 的底層執行基礎:
| 套件 | CLDC 1.0 | CLDC 1.1 新增 |
|---|---|---|
java.io | ✓ | |
java.lang | ✓ (精簡版) | |
javax.microedition.io | ✓ (Generic Connection Framework) | |
java.util | ✓ (精簡版,無 Collections Framework) | |
java.lang.ref | ✓ (弱/軟/虛引用) | |
java.lang.reflection | ✓ (有限反射) |
float/double,1.0 僅整數運算Mobile Information Device Profile (MIDP) 建構在 CLDC 之上,定義應用程式完整生命週期與 UI:
startApp()/pauseApp()/destroyApp() 三態管理,AMS (Application Management System) 控制Display、Screen、Form、List、Alert、Command 事件模型Canvas、Graphics、按鍵/指標事件、遊戲迴圈支援RecordStore 記錄導向儲存、枚舉查詢、監聽器通知Connector.open() 統一介面支援 HTTP、HTTPS、Socket、Datagram、SMS、Bluetooth| 特性 | MIDP 1.0 | MIDP 2.0 | MIDP 3.0 (JSR 271) |
|---|---|---|---|
| 安全模型 | 無 | 信任域/權限 | 增強權限/多任務 |
| 多媒體 | 無 | MMAPI (JSR 135) | 進階媒體控制 |
| Web 服務 | 無 | JAXP/JSR 172 | 完整 WS 支援 |
| 背景執行 | 無 | Push Registry | 多任務/自動啟動 |
| UI 增強 | 基礎 | 自訂項目/遊戲 API | 豐富 UI/向量圖形 |
┌─────────────────────────────────────┐ │ MIDP Profile │ ← 應用開發 API ├─────────────────────────────────────┤ │ CLDC Configuration │ ← JVM + 核心庫 ├─────────────────────────────────────┤ │ Native OS / Hardware │ ← 底層平台 └─────────────────────────────────────┘
一個 J2ME 平台 = 1 個 CLDC + 1~N 個 Profile (MIDP、PDAP、DoJa 等)。開發者針對特定 CLDC/MIDP 版本組合編寫應用,透過預驗證與 OTA (Over-The-Air) 部署至裝置。
掌握記憶體三分區是 J2ME 開發生存之本;理解CLDC定義了語言與運行時邊界;熟悉MIDP則掌握應用架構全貌。建議開發前確認目標裝置的 CLDC/MIDP 版本、Heap 大小、JAR 上限、RMS 空間,並建立記憶體預算表——在寸土寸金的行動世界,規劃勝於優化。