J2ME 程式設計/MIDP 中的 JVM
本文介紹了針對 J2ME 平臺的 MIDP 裝置系列中 Java 虛擬機器 的演變。J2ME 開發人員會發現此資訊有助於確定其特定的目標裝置是否支援裝置上模擬以及在移動裝置上進行應用程式開發所需的其它有用資訊。
1999 年,Sun Microsystems 推出了用於 CLDC/MIDP 裝置的 K 虛擬機器。摩托羅拉在 1999 年的 JavaOne 大會上展示了幾款不同的裝置,例如執行 KVM 的尋呼機("走上街頭". 走上街頭:摩托羅拉和 K 機器.)。
隨著 Sun Microsystems 工程師著手解決最佳化 Java 虛擬機器的問題,他們提出了 Java 平臺偵錯程式架構("JPDA". Java 平臺偵錯程式架構主頁.)作為完整的除錯基礎設施,以幫助 Java 開發人員使用 JVM 本身來提供除錯功能,在執行模式操作中除錯 Java 應用程式。
由於移動裝置的記憶體大小佔用很小,很明顯,完整的 JPDA 無法在移動裝置的 JVM 中實現。因此,JPDA 的最低部分,Java 除錯線協議(JDWP)在 KVM 上被實現為 KVM 除錯線協議(KDWP)。通常,在 J2SE 平臺中,您將使用 IDE 將其 JVM 連線到應用程式 JVM 以收集從應用程式 JVM 傳送的 JDWP 資料。在移動 J2ME 開發環境中,您將使用 Sun 的 WTK 裝置上除錯實現或 OEM 供應商的模擬器來代替 IDE JVM,透過 KDWP 通道從移動裝置 KVM 收集資料。
羅切斯特理工學院的教師(Jim Vallino 和 Hans-Peter Bischof)以及學生(Jon Coles、Zakir Mahomedy、Brian Koponen、Jeff Myers、John Mikucki、Aaron Deitrich)研究了更完整的移動 JDPA("KVMDB 專案". 在 Palm 平臺上除錯 Java 程式.),這為 Sun Microsystems 在 2001 年為 KVM 推出的 KDPA 產品做出了貢獻("Tasneem Sayeed - JavaOne 幻燈片" (PDF). 深入瞭解新特性的 K 虛擬機器 (KVM) 技術概述.)。
隨著 J2SE 1.3.x 的釋出,Sun Microsystems 向 Java 開發人員社群推出了 Java HotSpot Java 虛擬機器技術。2001 年,將 HotSpot 最佳化 JVM 技術引入 CLDC/MIDP 裝置(稱為 Monty)("CLDC HI 白皮書" (PDF). CLDC HotSpot 實現虛擬機器.)。2004 年推出了用於 CDC/J2ME 平臺裝置的 HotSpot Java 虛擬機器。
KVM1.0 及更高版本基於 Spotless 非最佳化 JVM 架構("Spotless". Spotless 系統主頁.)。所有 KVM 都有 KVM 平臺除錯架構,除錯由 Sun Microsystems WTK 或供應商 OEM 模擬器/模擬器中的除錯代理(也稱為除錯代理)來促進,以將除錯資料和記憶體密集型除錯操作與 IDE JVM 中發生的操作連線起來("Tasneem Sayeed - JavaOne 幻燈片" (PDF). 深入瞭解新特性的 K 虛擬機器 (KVM) 技術概述.)。
即使有這兩個部分,移動裝置上的 KDWP 部分也必須在首次編譯和部署到該裝置的 KVM 時啟用編譯器開啟。一些 OEM 供應商由於在裝置系列上自己的 KVM 實現中面臨的記憶體/速度限制而沒有啟用此功能。通常,與桌上型電腦上的 JDK 1.1.x 相比,KVM 的效能為 30% 到 80%。
- 沒有 Just-In-Time 編譯技術的 JDK 1.1.x 桌上型電腦速度效能的 30% 到 80%
- 用 C 語言實現
- 小型記憶體佔用大小為 60-72kb
- 平臺無關的綠色執行緒
- 移植到 Linux、Windows、Solaris 和 Windows CE
- 基本位元組碼直譯器
- 基於現有的 JDWP(Java 除錯線協議)
- 記憶體密集型操作移至桌上型電腦工作站上的除錯代理(也稱為除錯代理)
- KVM 實現 JDPW 命令集的子集(KDWP)
移動和桌上型電腦實現中的 HotSpot 一詞都指的是使用自適應編譯器,僅將位元組碼編譯為頻繁使用的方法(熱點)的本地指令。不常用的方法使用最佳化的直譯器進行解釋。這比 KVM 位元組碼直譯器將效能提高了 5 到 7 倍。
由於超過 90% 的 MIDP 裝置使用 ARM 處理器系列,因此 CLDC HotSpot VM 實現使用三種方法來最佳化 ARM 處理器,被稱為 Thumb 模式支援。
- VM 可以編譯為 16 位 Thumb 機器程式碼
- 動態自適應編譯器可以配置為生成 16 位 Thumb 機器程式碼
- 最佳化的直譯器使用 32 位 ARM 指令集實現
與 KVM 相比,另一個新功能是多工選項,可以在移動裝置上的一個 JVM 中執行多個執行緒和 MIDLet。這些新的多工功能在不依賴底層作業系統的基礎上實現。
此虛擬機器實現還實現了首先在 KVM 中引入的符合 JDPA 的技術,稱為 KDWP。它是透過編譯 CLDC-HI VM 並將其部署到移動裝置來實現的。並非每個 OEM 供應商都在其使用的特定處理器和移動硬體上對 CLDC-HI VM 進行了足夠的最佳化,因此一些具有 MIDP2.0 的移動裝置停用了此功能。
- "走上街頭". 走上街頭:摩托羅拉和 K 機器.(http://java.sun.com/features/1999/06/moto.html)
- "JPDA". Java 平臺偵錯程式架構主頁.(http://java.sun.com/products/jpda/)
- "KVMDB 專案". 除錯 Palm 平臺上的 Java 程式.(http://www.se.rit.edu/~jrv/research/KVMDB_Project.html)
- "Tasneem Sayeed - JavaOne 幻燈片" (PDF). K 虛擬機器 (KVM) 的技術概述,深入探討新功能.(http://www.eos.dk/web/jaooslides/session_TasneemSayeed.pdf)
- "CLDC HI 白皮書" (PDF). CLDC HotSpot 實現虛擬機器.(http://java.sun.com/j2me/docs/pdf/CLDC-HI_whitepaper-February_2005.pdf)
- "Spotless". Spotless 系統主頁.(http://research.sun.com/spotless/)
J2ME、Java 和所有基於 Java 的標誌是 Sun Microsystems, Inc. 在美國和其他國家/地區的商標或註冊商標。