MIDlet的優(yōu)化
- 期刊名字:固原師專學(xué)報(bào)
- 文件大?。?83kb
- 論文作者:藺勇
- 作者單位:寧夏師范學(xué)院
- 更新時(shí)間:2020-09-29
- 下載次數(shù):次
第27卷第3期固原師專學(xué)報(bào)(自然科學(xué))2006年5月. No.3 Vol.27Joumal of Guyuan Teachers College (Natural Science)May. 2006MIDlet的優(yōu)化藺勇(寧夏師范學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)系,寧夏固原756000)摘要:MIDlet運(yùn)行在低速 、小內(nèi)存的設(shè)備和窄帶的網(wǎng)絡(luò)環(huán)境中,因此MIDlet程序設(shè)計(jì)中應(yīng)該有針對(duì)性地進(jìn)行優(yōu)化.文章分析了影響MIDlet運(yùn)行的各因素,提出了對(duì)象重用、主動(dòng)垃圾回收、使用高效協(xié)議等優(yōu)化方法,并討論了這些方法實(shí)施中需要解決的問(wèn)題,關(guān)鍵詞:J2ME;MIDlet;優(yōu)化;無(wú)線中圖分類號(hào):TP393. 19文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1001-0491(2006)03- -0034- -041引言J2ME是Java針對(duì)移動(dòng)設(shè)備的版本, MIDlet是指J2ME在手機(jī)、PDA上的應(yīng)用程序(又可稱作KJava程序).將信息管理系統(tǒng)擴(kuò)展到無(wú)線領(lǐng)域的諸多方案中,基于KJava的移動(dòng)客戶端是相對(duì)較好的選擇,因?yàn)椋梢灾С謴V泛的網(wǎng)絡(luò)協(xié)議,具有良好的安全性和平臺(tái)交叉的兼容性.這種跨平臺(tái)、設(shè)備無(wú)關(guān)的特點(diǎn)是目前所有的手機(jī)和PDA開(kāi)發(fā)工具都不具有的特性.但是,J2ME在支持手機(jī)的CLDC規(guī)范中規(guī)定,該類設(shè)備有如下特征叫:●有128KB內(nèi)存供Java運(yùn)行;●32KB供運(yùn)行時(shí)分配的存儲(chǔ)空間;●受限制的用戶接口;●能量有限,主要以電池提供能量;●網(wǎng)絡(luò)連接可能是窄帶寬、不穩(wěn)定的、且以無(wú)線連接為主.這說(shuō)明MIDlet所運(yùn)行的硬件環(huán)境和網(wǎng)絡(luò)環(huán)境都無(wú)法與桌面系統(tǒng)比,MIDlet運(yùn)行的移動(dòng)設(shè)備是資源受限制的環(huán)境,這些限制可概括為:移動(dòng)設(shè)備的處理器運(yùn)算速度低;移動(dòng)設(shè)備內(nèi)存有限(-些移動(dòng)電話限制MIDlet程序?yàn)?0k);網(wǎng)絡(luò)連接速度慢.在這樣的系統(tǒng)上運(yùn)行的程序,如果不作任何優(yōu)化,就很難保證它既完成預(yù)期的功能又運(yùn)行流暢,所以優(yōu)化是J2ME程序設(shè)計(jì)必須的環(huán)節(jié).下面主要從運(yùn)算速度、內(nèi)存使用和網(wǎng)絡(luò)三方面討論優(yōu)化的方法.2為提高速度而作的優(yōu)化MIDlet在不同手機(jī)上的性能特性可能會(huì)有顯著的不同(在種手機(jī)卜姓能奶佳的實(shí)現(xiàn)方法,在.另一種手機(jī)上卻不一定是最好的.例如,在某種手機(jī)上,某中國(guó)煤化工va實(shí)現(xiàn),但在另一FYHCNMHG收稿日期:2005-12-09作者簡(jiǎn)介:藺勇(1973- -),男,寧夏固原人,碩士,講師。第27卷第3期藺勇:MIDlet的優(yōu)化35種手機(jī)上,該方法卻可能封裝了使用本機(jī)語(yǔ)言編寫(xiě)的更快的方法.所以速度優(yōu)化的第一個(gè)原則就是盡量采用接近本機(jī)語(yǔ)言的方法,其次應(yīng)該從以下方面優(yōu)化:2.1使 用數(shù)組不使用對(duì)象數(shù)組通常比類和類集更快更小,在MIDlet中應(yīng)該盡可能使用數(shù)組以提高運(yùn)行速度. MIDlet中使用頻度比較高的類和類集有String 和StringBuffer以及Hashtable 和Vector3) ,下面分別討論他們與數(shù)組之間如何選擇.在處理字符時(shí),直接使用字符數(shù)組將比處理String和StringBuffer更有效. Strings 是Java中唯一把“+”操作重載的類,但每個(gè)字符串聯(lián),都將創(chuàng)建一個(gè)新的對(duì)象.所以如果在循環(huán)內(nèi)組裝-一個(gè)字符串,就應(yīng)該考慮引入StringBuffer ,從StringBuffer創(chuàng)建String 時(shí),String指向相同的字符數(shù)組,這樣不會(huì)增加系統(tǒng)的開(kāi)銷.但是如果修改StringBuffer,則會(huì)從原來(lái)的數(shù)組通過(guò)復(fù)制創(chuàng)建一個(gè)新的字符數(shù)組.因而StringBuffer創(chuàng)建新對(duì)象時(shí)不是-一個(gè)嚴(yán)密的方法.所以,最好的優(yōu)化是完全不用String 和StringBuffer,而是用字符數(shù)組.但觱要注意的是,很多APIS要求Strings作為參數(shù)并以此作為返回值,所以采用數(shù)組后就要不停地在string和字符數(shù)組之間作大量的轉(zhuǎn)換.類集Vector和Hashtable使用簡(jiǎn)單有效,但卻附加著一些需要被精簡(jiǎn)的東西.Vector只是一個(gè)數(shù)組的包,所以如果能直接處理-個(gè)數(shù)組,那么就可以節(jié)省下一些內(nèi)存和處理器時(shí)間.同樣地,如果有一個(gè)簡(jiǎn)單的關(guān)鍵對(duì)象到有用對(duì)象之間的影射,則可以采用對(duì)象數(shù)組而不是Hashtable.如果一定要使用Hashtable或Vector,應(yīng)該在創(chuàng)建他們時(shí)準(zhǔn)確地確定其大小.這是因?yàn)閂ector和Hashtable會(huì)隨運(yùn)行需求改變內(nèi)存占用大小,帶來(lái)額外系統(tǒng)開(kāi)銷.Vector和Hashtable都有構(gòu)造函數(shù)允許指定集合的初始大小.使用時(shí)應(yīng)該最精確地指定集合的大小,這樣才能最大限度地減少使用Hashtable或Vector帶來(lái)的運(yùn)算開(kāi)銷.2.2使用具有緩沖的 I/O接口雖然流類提供了每次只寫(xiě)一個(gè)字節(jié)的方法,但是應(yīng)盡量避免對(duì)這種方法的使用,不應(yīng)每次從流中只讀一個(gè)字節(jié),或者只向流中寫(xiě)一個(gè)字節(jié),而是應(yīng)該建立緩沖同時(shí)讀寫(xiě)一個(gè)數(shù)組的所有數(shù)據(jù),這樣更為有效. J2SE提供了BufferedReader 和BufferedWriter類,用以提供I/0緩沖的功能,但在MIDP中沒(méi)有提供這樣的類,所以如果使用I/O緩沖的功能需要設(shè)計(jì)者自己動(dòng)手來(lái)做.2.3 對(duì)象重用應(yīng)避免產(chǎn)生不必要的“垃圾”對(duì)象,盡量重用現(xiàn)有對(duì)象.其中Immutable(不可變對(duì)象)是一個(gè)特例,它們的狀態(tài)自對(duì)象創(chuàng)建后就不能改變,由于不可變對(duì)象有利于代碼的可靠和線程的安全,因此得到了廣泛使用.然而,如果其初始值失去意義,例如,如果它們代表的值發(fā)生了改變,此時(shí)不可變對(duì)象極易變成垃圾對(duì)象.這樣每一次改變都會(huì)創(chuàng)建一個(gè)具有新值的新的不可變對(duì)象,而相應(yīng)的舊對(duì)象則被廢棄等待作為垃圾收集.就MIDlet來(lái)說(shuō),使用不可變對(duì)象的代價(jià)要高于它所能得到的利益,因此,此種情況下最好使用可以賦新值的可重用對(duì)象. .2.4多線程多線程使MIDlet具有更好的性能,這是因?yàn)?當(dāng)一個(gè)線程正等待某種條件時(shí)(如等待一個(gè)HTTP響應(yīng),或等待用戶輸人),另一個(gè)線程仍可以工作,它不能提高處理器速度,相反,可能使處理器速度降低,但是它可以使用戶感到速度加快了.使用多線程時(shí)需要注意,Java線程不一定具有搶先權(quán),而是相互協(xié)作,因此代碼不應(yīng)在“死循環(huán)”中等待所需條件,而應(yīng)該中國(guó)煤化工龍wait方法.MHCNMHG3優(yōu)化內(nèi)存資 源的使用-般說(shuō)來(lái),移動(dòng)電話的堆內(nèi)存都不大.例如,某些諾基亞MIDP手機(jī)僅提供150KB的MIDP堆內(nèi)固原師專學(xué)報(bào)(自然科學(xué))2006年5月存.所以不經(jīng)常使用的屏幕(如幫助,選項(xiàng)等)應(yīng)該在用到時(shí)才創(chuàng)建,并在每次使用后通過(guò)作為垃圾被收集而釋放其所占空間.這樣做是通過(guò)犧牲執(zhí)行速度而換取了額外的堆內(nèi)存.但是資源釋放也能夠加快程序的執(zhí)行.如果內(nèi)部數(shù)組或數(shù)據(jù)結(jié)構(gòu)不再使用,應(yīng)當(dāng)及時(shí)釋放他們.釋放的方法是設(shè)置數(shù)組指向空,這樣數(shù)組就被垃圾桶收集.如果需要更快地把內(nèi)存釋放給運(yùn)行系統(tǒng),則可以通過(guò)主動(dòng)調(diào)用System.gc()來(lái)作垃圾收集.但是要特別注意“內(nèi)存泄漏”.當(dāng)不再擁有某個(gè)對(duì)象,但卻在某些地方仍然存在對(duì)它的引用時(shí),就會(huì)發(fā)生內(nèi)存泄漏.所以當(dāng)不能摒棄對(duì)某個(gè)無(wú)用對(duì)象的引用時(shí),應(yīng)將引用設(shè)為空(這樣將使其不會(huì)被作為垃圾被收集).每次在內(nèi)存中創(chuàng)建(用new)對(duì)象時(shí),內(nèi)存都被分配,內(nèi)存分配是需要時(shí)間的.最壞的情況是對(duì)象在循環(huán)初始時(shí)創(chuàng)建而在循環(huán)末尾就結(jié)束對(duì)象的使用.這將意味著整個(gè)循環(huán)中運(yùn)行環(huán)境將不停地進(jìn)行垃圾收集.循環(huán)中創(chuàng)建一個(gè)對(duì)象是對(duì)執(zhí)行的雙重不利:首先是創(chuàng)建要付出代價(jià),然后垃圾回收同樣需要開(kāi)銷.因此MIDlet設(shè)計(jì)中創(chuàng)建和丟棄都要慎重.4優(yōu)化網(wǎng)絡(luò)資源的使用網(wǎng)絡(luò)速度通常按照帶寬和延遲時(shí)間來(lái)衡量,這兩項(xiàng)指標(biāo)都有平均值和浮動(dòng)差.即使平均值是可接受的,如果浮動(dòng)差過(guò)大,用戶也是常常難以接受的.對(duì)于大數(shù)據(jù)量傳輸,帶寬通常對(duì)網(wǎng)絡(luò)速度的影響是主要的.而對(duì)小數(shù)據(jù)量傳輸,延遲時(shí)間更為重要.這兩種性能指標(biāo)的量度都取決于網(wǎng)絡(luò)技術(shù)和網(wǎng)絡(luò)連接的特定屬性.所以,般意義上給出精確數(shù)據(jù)是不可能的.但可以給出一些概念化數(shù)據(jù)以幫助設(shè)計(jì).表1給出的一些特征值是最近從諾基亞內(nèi)部研究和非正式測(cè)試中獲得的.表1移動(dòng)設(shè)備網(wǎng)絡(luò)環(huán)境帶寬(千比特每秒)HTTP往返延遲的首次值HTTP往返延遲的隨后值GSM電路交換數(shù)據(jù)(CSD)9. 6kbps .5- 10秒2-3秒GSM高速電路交換數(shù)據(jù)(HSCSD)43kbps5-10秒2- 3秒GPRS5 - 50kbps2-4秒這兩種性能指標(biāo)的量度都取決于網(wǎng)絡(luò)技術(shù)和網(wǎng)絡(luò)連接的特定屬性.對(duì)付網(wǎng)絡(luò)延遲的一個(gè)可行解決方法是使用各種異步網(wǎng)絡(luò)操作(利用一個(gè)后臺(tái)網(wǎng)絡(luò)線程).例如,如果用戶正向儲(chǔ)存服務(wù)器發(fā)送一個(gè)內(nèi)容時(shí),就沒(méi)有必要將MIDlet的其它部分掛起而等待這一操作的完成;相反,可以讓后臺(tái)網(wǎng)絡(luò)線程來(lái)處理這一動(dòng)作,而用戶則可以進(jìn)入下一個(gè)程序單元.除此之外還應(yīng)從以下方面進(jìn)行優(yōu)化處理:4.1 限制HTTP的往返傳輸由于無(wú)線網(wǎng)絡(luò)中的HTTP延遲時(shí)間較長(zhǎng),因此應(yīng)該努力減少M(fèi)IDlet使用的HTTP往返傳輸次數(shù).最小化MIDlet所發(fā)送的信息包的數(shù)量和大小,應(yīng)該一次性地獲取它所需的全部?jī)?nèi)容,避免MIDlet向服務(wù)器發(fā)送-成不變的消息.如果MIDlet要從幾個(gè)不同的數(shù)據(jù)源收集數(shù)據(jù),一種可選的方法是用一個(gè)代理servlet來(lái)收集[(] ,這樣MIDlet仍然只需要發(fā)送一次請(qǐng)求.網(wǎng)絡(luò)連接處理完以后應(yīng)該予以釋放,可使用finally語(yǔ)句,否則從連接的輸人流中讀數(shù)據(jù)時(shí)如果拋出了異常執(zhí)行跳轉(zhuǎn)到異常句柄,而輸入流和連接一直都不被關(guān)閉.在J2SE環(huán)境下,內(nèi)存較大,這可能不是個(gè)大問(wèn)題.但是MIDlet保持連接可能是一個(gè)災(zāi)難.中國(guó)煤化工4.2避免低效協(xié)議YHCNMHGMIDlet中SOAP等基于XML的復(fù)雜協(xié)議可能由于數(shù)據(jù)大小、解析時(shí)間和解析代碼大小等高端開(kāi)銷而變得非常低效.因此設(shè)計(jì)MIDP客戶端基于XML的協(xié)議,應(yīng)該使其盡可能地簡(jiǎn)潔.如果不需要這第27卷第3期藺勇:MIDlet的優(yōu)化37些協(xié)議的高級(jí)功能,則可以用一個(gè)簡(jiǎn)單的自定義協(xié)議(例如username = fred, password= secret)來(lái)發(fā)送同樣的信息,這樣效率會(huì)高得多.-般說(shuō)來(lái),如果使用某個(gè)簡(jiǎn)單自定義協(xié)議,那么設(shè)計(jì)者就要既寫(xiě)MIDlet客戶端又寫(xiě)服務(wù)器端(如servlet).這就帶要注意版本管理,當(dāng)升級(jí)客戶端和服務(wù)器時(shí)如使用一個(gè)新協(xié)議,而對(duì)應(yīng)的MIDlet仍然使用舊協(xié)議,就會(huì)產(chǎn)生錯(cuò)誤,這可以通過(guò)在客戶端和服務(wù)器間的開(kāi)放式通信中包含協(xié)議的版本號(hào)來(lái)避免,如果MIDlet與不受自己控制的服務(wù)器通話,或者某臺(tái)服務(wù)器要與除MIDlet之外的其它客戶端通話,則MIDlet可能不得不用XML或SOAP與之通信.在這種情況下,可以使用代理servlet5].如圖1所示代理servlet可以在SOAP或XML協(xié)議與MIDlet自定義協(xié)議之間實(shí)現(xiàn)轉(zhuǎn)換.它根據(jù)每個(gè)MIDlet請(qǐng)求對(duì)應(yīng)地發(fā)送-系列SOAP或XML請(qǐng)求,由于代理servlet和服務(wù)器之間通過(guò)一個(gè)快速固網(wǎng)連接,因而這樣做的效率很高.lower bontridhhighr bandridhbigher latenryloner latengyigher costlonercost( Proxy servletNaMoCuston protocolSOAPXML圖1:代理Servlet5結(jié)束語(yǔ)通過(guò)上面的論述,MIDlet程序設(shè)計(jì)中優(yōu)化的方法很多都不利于Java面向?qū)ο蟮墓δ馨l(fā)揮.所以,優(yōu)化是設(shè)計(jì)者犧牲設(shè)計(jì)的便捷性換來(lái)的性能提升.在現(xiàn)有的硬件環(huán)境下主要制約MIDlet程序性能的還是移動(dòng)設(shè)備的硬件功能,系統(tǒng)整體性能的提高有待于硬件技術(shù)的發(fā)展,軟件的優(yōu)化能提高系統(tǒng)效率,但還不能從根本上解決運(yùn)行速度問(wèn)題.參考文獻(xiàn):[1] JSR68 ,2ME Platform Specification[S].的性能優(yōu)化技術(shù)[J].計(jì)算機(jī)工程,2004,18:46- - 48.[2]徐文峰.基于J2ME的Java手機(jī)軟件開(kāi)發(fā)[J].微[5]竇文,賈焰,鄒鵬.關(guān)于嵌人式Java技術(shù)的研究型機(jī)與應(yīng)用,2002,1:32 - 34.[C].2002年亞太地區(qū)高速網(wǎng)絡(luò)(APAN)上海會(huì)議論文[3] JSR37 ,Mobile Information Device Profile[S].集。2002,144-147.[4]李允,羅蕾,雷昊峰,熊光澤.嵌入式Java虛擬機(jī)MIDlet OptimizingLIN Yong(Department of Mathematics& Computer , Ningxia Teachers' University, Ningxia ,Guyuan 756000)Abstract: The device MIDlet running has low processor , small memory and narrow band net-work. Application of MIDlet should be optimized. Thisand put forwardsome optimizing method: object reused, garbage collectec中國(guó)煤化工ocol. How to userYHCNMHGthem are also discussed.Key words : J2ME;MIDlet;optimizing; wireless(責(zé)任編輯胡茂林)
-
C4烯烴制丙烯催化劑 2020-09-29
-
煤基聚乙醇酸技術(shù)進(jìn)展 2020-09-29
-
生物質(zhì)能的應(yīng)用工程 2020-09-29
-
我國(guó)甲醇工業(yè)現(xiàn)狀 2020-09-29
-
石油化工設(shè)備腐蝕與防護(hù)參考書(shū)十本免費(fèi)下載,絕版珍藏 2020-09-29
-
四噴嘴水煤漿氣化爐工業(yè)應(yīng)用情況簡(jiǎn)介 2020-09-29
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-09-29
-
甲醇制芳烴研究進(jìn)展 2020-09-29
-
精甲醇及MTO級(jí)甲醇精餾工藝技術(shù)進(jìn)展 2020-09-29




