從表面上看,這樣做對那些希望提升應(yīng)用程序的移動計(jì)算能力的開發(fā)者來說是一件好事。然而,“移動設(shè)備”這個(gè)術(shù)語卻涵蓋了相當(dāng)廣泛的領(lǐng)域,包括傳統(tǒng)的個(gè)人數(shù)字助理(PDA)、所謂的智能電話、傳呼機(jī)乃至GPS單元等,它們都具有各不相同的硬件配置。同樣的,這類設(shè)備的市場也支離破碎,同一供應(yīng)商的兩種設(shè)備之間都還存在兼容性問題,更別說不同供應(yīng)商的設(shè)備產(chǎn)品了,在很多情況下簡直就是亂七八糟。
給這些五花八門的移動設(shè)備提供一種普遍適用的開發(fā)平臺看來多半是不可能的了。所以J2ME定義了兩種類型的規(guī)范,它們攜手提供一種移動Java平臺,這兩種規(guī)范就是configurations 和profiles。Configuration和profile規(guī)范提出了相當(dāng)多的技術(shù)術(shù)語,下面我們就來討論一些。
Configuration
J2ME通過對Configuration的抽象來處理大量千差萬別的移動設(shè)備硬件功能。J2ME configuration定義了特定設(shè)備可用的虛擬機(jī)和低級API,同時(shí)提供相應(yīng)的開發(fā)基礎(chǔ)。目前可用的Configuration有兩種,它們是連接設(shè)備配置CDC(Connected Device Configuration)和連接有限設(shè)備配置CLDC(Connected Limited Device Configuration)。
連接設(shè)備配置
CDC應(yīng)用于相對內(nèi)存量較大、更強(qiáng)處理器的移動設(shè)備。CDC規(guī)范采用了內(nèi)存優(yōu)化的虛擬機(jī),也就是所謂的CVM,通過它提供等同標(biāo)準(zhǔn)JVM的特性。按照Sun的文檔說明, CDC針對新型PDA、智能通訊設(shè)備和機(jī)頂盒之類的高端設(shè)備。為了能夠受到CDC支持,移動設(shè)備必須至少具備以下條件:
用于CVM和Java API庫的2 MB內(nèi)存。
32位微處理器或者控制器。
可用網(wǎng)絡(luò)連接,最好是高帶寬連接。
連結(jié)有限設(shè)備配置
CDC的要求有利于昂貴的移動電話、IR掃描儀或類似產(chǎn)品。CLDC則主要針對那些更輕便、更便宜、不能滿足CDC要求的設(shè)備。
CLDC采用了更輕型的虛擬機(jī),設(shè)計(jì)為在較低內(nèi)存環(huán)境下運(yùn)行。這種JVM的參考實(shí)現(xiàn)也就是所謂的KVM,為什么要叫KVM呢?這是因?yàn)檫@種虛擬機(jī)的大小是以千字節(jié)度量的。CLDC 的設(shè)備需求如下:
最低160KB的內(nèi)存,其中128KB用于KVM和運(yùn)行時(shí)庫
最低16位25-MHz處理器
有限的用戶界面功能
沒有(或者間歇的)低帶寬網(wǎng)絡(luò)連接
由于受到嚴(yán)格的內(nèi)存容量限制,KVM因此缺乏一些完整JVM所提供的特性,這就是說,你可能得改變自己的編程風(fēng)格了。KVM在如此低內(nèi)存要求下不得不在浮點(diǎn)數(shù)學(xué)計(jì)算、反應(yīng)和對finalizers類的支持等方面對性能折中。使用CLDC的開發(fā)者在編譯程序之后必須預(yù)先采用J2ME開發(fā)工具包所提供的一種檢查工具對他們的源代碼進(jìn)行校驗(yàn)。
profile
如果說配置為應(yīng)用程序提供了基礎(chǔ),那么profile則提供了應(yīng)用程序的框架。profile定義了一整套J2ME應(yīng)用程序可用的API類而且專門針對給定配置創(chuàng)建。Sun推出了2種可用的參考J2ME profile:基礎(chǔ)(Foundation)和移動信息設(shè)備profileMIDP(Mobile information Device Profile)。
基礎(chǔ)profile主要用于CDC配置,因而其虛擬機(jī)幾乎等同于標(biāo)準(zhǔn)的虛擬機(jī)。這意味著,使用基礎(chǔ)profile的開發(fā)人員必須訪問完整實(shí)現(xiàn)的J2SE特性集。
MIDP連同功能較低的CLDC配置一道為開發(fā)今天的移動設(shè)備應(yīng)用程序提供了你最可能用到的Java平臺。MIDP支持J2SE類庫的有限子集而且為在CLDC配置上使用定義了定制的用戶接口和輸入/輸出類。
編寫一次到處可行?
兼容性如何呢?J2SE應(yīng)用程序能在J2ME平臺上運(yùn)行嗎?這些問題的答案主要取決于配置和profile的具體應(yīng)用了。J2SE代碼無須或者很少修改即可采用CDC和基礎(chǔ)profile運(yùn)行。然而,正如我們在這里所討論的那樣,由于主機(jī)硬件受到限制,CLDC和MIDP profile只提供了很有限的功能集合。因此它J2SE應(yīng)用程序不大可能在不加修改的情況下就運(yùn)行在這類平臺上,除非它把自己限制在兩種平臺的API交集之內(nèi)(嚴(yán)重地限制了其功能)。因?yàn)镃IDC的要求對應(yīng)了今天大多數(shù)手持設(shè)備的功能,所以任何J2SE應(yīng)用軟件想不經(jīng)修改就運(yùn)行在給定的設(shè)備上是值得懷疑的。你多半得修改需要移植到J2ME的應(yīng)用軟件。但也別緊張。從保住飯碗的角度看這未嘗不是好事。