(本文作者岑永洪來(lái)自中科院軟件所。您現在即可參加“我眼中的Java”有獎?wù)魑幕顒?dòng),詳情請看:http://news.csdn.net/news/newstopic/22/22661.shtml)
Java語(yǔ)言最大的一個(gè)特點(diǎn)就是他的跨平臺特性,也就是平時(shí)廣告語(yǔ)中說(shuō)得最多的“write once run anywhere”??缙脚_最明顯的一個(gè)優(yōu)點(diǎn)就是,你寫(xiě)的程序地球人都能運行,這對程序員來(lái)說(shuō)就是減少了工作量,對于公司來(lái)說(shuō)就是減少了投入。但是,天底下沒(méi)有免費的午餐,跨平臺是需要有代價(jià)的,最明顯的一個(gè)就是我們的代碼將會(huì )被編譯為所謂的“字節碼”,這些代碼在運行時(shí)由虛擬機進(jìn)行解釋執行,正是因為這種解釋執行的方式導致了Java程序的執行速度一直不如其他的C和C++程序。
雖然,跨平臺特性是如此優(yōu)秀,但是很多時(shí)候,我們是否真正考慮過(guò)我們是否需要這種特性呢,或者這種特性對我們來(lái)說(shuō)是利大還是弊大呢。
在國外,版權是一個(gè)很?chē)乐氐膯?wèn)題,因此,在國外雖然Windows系統占有比較大的市場(chǎng),但是在大學(xué),在政府部門(mén),在程序員當中,大量使用的是類(lèi)Unix和Linux的操作系統,只要對Unix操作系統稍有了解,就會(huì )知道Unix系統發(fā)展到今天,已經(jīng)出現了好幾個(gè)不同的發(fā)行版本,這些版本雖然沒(méi)有大的區別,但是還是存在著(zhù)或多或少的不兼容,因此,一個(gè)程序如果需要在不同的平臺間運行,那么移植將是必不可少的。因此,對于國外的桌面系統環(huán)境,Java程序的跨平臺性顯然比他的性能因素更重要。但是,反觀(guān)國內,占據市場(chǎng)主導的都是Windows系統,而程序員所開(kāi)發(fā)的程序也基本上是運行于該平臺下,很少需要考慮程序移植的問(wèn)題。因此,一個(gè)程序是否能跨平臺運行,對于我們來(lái)說(shuō)不如國外強烈,所以,從我們的現實(shí)情況出發(fā),性能比跨平臺顯然更為重要。但是,從長(cháng)遠來(lái)說(shuō),如果我們希望我們自己寫(xiě)的程序能夠沖出亞洲,走向世界,那么跨平臺性顯然也是一種很有利的特性。
除了桌面應用以外,Java程序還主要運行于服務(wù)器端和嵌入式終端,對于服務(wù)器端,我覺(jué)得沒(méi)必要多加評論,因為與桌面應用的PC不同,服務(wù)器端應用所依賴(lài)的硬件平臺尚未呈現一個(gè)一家獨大的情況,因此跨平臺性是非常重要的,而且現有的應用也表明J2EE平臺已經(jīng)成為了事實(shí)的標準,因此,不管他合適與否,我們也只能繼續使用。
而對于嵌入式終端,特別是智能手機,我覺(jué)得是一個(gè)很值得討論的部分。嵌入式市場(chǎng)在最近幾年表現出非常迅猛的發(fā)展勢頭。在終端方面,現在市場(chǎng)上存在著(zhù)大量的終端生產(chǎn)商,而根據過(guò)去幾年的市場(chǎng)份額分析,各大生產(chǎn)商的份額雖然一直在改變,但是總體趨勢仍是保持著(zhù)的一個(gè)各方均衡的情況;對應于多個(gè)生產(chǎn)商,在操作系統和應用系統方面也是呈現出一個(gè)群雄割據的局面,在操作系統方面,主要是Symbian,Linux,WinCE,Palm;而在應用系統方面則包括了J2ME,Brew及其他與操作系統相應的系統。在這種情況下,如果應用是特定于某一平臺的話(huà),那么不管是對生產(chǎn)商,開(kāi)發(fā)商或最終用戶(hù)都是一件不利的事情,為此,一個(gè)能跨平臺運行的程序將是嵌入式應用中最受歡迎和被接受的。因此,在嵌入式方面,Java的跨平臺性顯得非常重要。雖然跨平臺性觸進(jìn)了J2ME平臺在手機領(lǐng)域的發(fā)展,但也正是因為這個(gè)跨平臺性使得運行在J2ME之上的程序一直未如理想。
J2ME通過(guò)CLDC和MIDP來(lái)定義運行于手機之上的Java虛擬機的特性,這兩個(gè)規范定義的都是最低要求,而為了能夠增加J2ME在不同手機上的移植,這兩個(gè)規范所定義的配置門(mén)檻都非常的低,低的門(mén)檻雖然一方面能擴大市場(chǎng),但是另一方面也制約了上層應用的開(kāi)發(fā),這表現在性能和應用模式上。
游戲是手機應用中一個(gè)非常熱門(mén)的方面,但是由于她的性能和表現與下層的硬件直接相關(guān),所以,如果我們使用J2ME所提供的API來(lái)開(kāi)發(fā)游戲的話(huà),那么我們只能假定我們所開(kāi)發(fā)的游戲所能使用的資源就是規范中所規定的,這無(wú)疑會(huì )對我們的創(chuàng )意和實(shí)現帶來(lái)影響。而從市場(chǎng)上現有的運行于J2ME之上的手機游戲,我們也不難看到,這些游戲無(wú)論從品質(zhì)和層次上都有待提高。
一般的桌面軟件,都是通過(guò)一個(gè)頁(yè)面來(lái)獲取用戶(hù)的多個(gè)輸入,但是由于手機并不像PC那樣配有在控件之間進(jìn)行切換的“Tab”鍵或者鼠標,因此,當需要向用戶(hù)獲取多個(gè)輸入時(shí),一般情況下,我們都需要通過(guò)多個(gè)頁(yè)面來(lái)完成,這顯得非常冗余而且低效。從這里,我們不難看出點(diǎn)選設備的存在與否,對于我們的應用模式,存在非常大的影響。但是,這在J2ME規范中并未對此加以區分。
跨平臺是一個(gè)好事情,但是有時(shí)候我們需要做出一些折中,因為,一個(gè)技術(shù)是否能夠存活和發(fā)展不僅看他是否優(yōu)秀,很多時(shí)候還需要看他是否能夠占領(lǐng)市場(chǎng),因此為了市場(chǎng)而犧牲一部分的特性,我覺(jué)得也是合適的。
聯(lián)系客服