即興的靈感

          思維是一種藝術(shù); 藝術(shù)需要靈感。

          博客好友

          最新評(píng)論

          J2ME手機(jī)開發(fā)之內(nèi)存優(yōu)化攻略

          ??????嚴(yán)正聲明:本文出自即興詩(shī)人blogjava博客,作者經(jīng)過(guò)整理總結(jié)而得,如轉(zhuǎn)載必需與作者聯(lián)系improviser@163.com!
          ??????在C或C++開發(fā)過(guò)程中,內(nèi)存溢出問(wèn)題可謂是經(jīng)常讓開發(fā)人員極其痛苦的事情,稍不注意問(wèn)題就產(chǎn)生,甚至引發(fā)隱含的漏洞產(chǎn)生。JAVA正是在C++的優(yōu)秀品質(zhì)中繼承下來(lái)的產(chǎn)物,擁有垃圾回收機(jī)制是JAVA虛擬機(jī)在C++繼承過(guò)程中進(jìn)化的一個(gè)重要地方,垃圾回收機(jī)制能在對(duì)象沒被使用之后的某個(gè)時(shí)間將對(duì)象進(jìn)行回收,從而能使無(wú)用對(duì)象占據(jù)的內(nèi)存得到釋放。但是,這僅僅對(duì)有足夠內(nèi)存的Server服務(wù)器主機(jī)跟PC機(jī)上的虛擬機(jī)有用,對(duì)于內(nèi)存極其珍貴的設(shè)備來(lái)說(shuō)垃圾回收機(jī)制卻顯得有點(diǎn)無(wú)能為力,英雄無(wú)用武之地。雖然隨著手機(jī)硬件的不斷升級(jí),智能手機(jī)中的手機(jī)內(nèi)存以及CPU資源大大得到提升,但是目前用戶手中的手機(jī)并無(wú)法普遍達(dá)到這種水平,因此在J2ME設(shè)計(jì)開發(fā)過(guò)程中我們需要很好的考慮到每一寸內(nèi)存土地的利用。今天參考了有關(guān)資料,并對(duì)J2ME開發(fā)過(guò)程中的內(nèi)存相關(guān)內(nèi)容做個(gè)歸納,以增加對(duì)內(nèi)存的使用有更好的理解。
          ??????一、程序內(nèi)存情況分析
          ??????1、在使用WTK中,我們可以調(diào)用工具中的Memory Monitor來(lái)查看程序的內(nèi)存使用情況。
          ??????2、使用相對(duì)于的手機(jī)模擬器內(nèi)存監(jiān)視器來(lái)對(duì)程序使用內(nèi)存進(jìn)行監(jiān)視。
          ??????3、Runtime類提供了查看剩余內(nèi)存的方法freeMemory()。

          ??????二、程序內(nèi)存占用分析
          ??????一個(gè)軟件在運(yùn)行過(guò)程中占據(jù)內(nèi)存主要是程序代碼和程序所使用的各類資源,包括文字文件資源、圖片、音樂(lè)等多媒體資源。
          ????? 而在JAVA虛擬機(jī)中,java代碼最終是被編譯成class文件的字節(jié)碼形式并且隨著程序的啟動(dòng)而加載到內(nèi)存中,因此經(jīng)過(guò)編譯之后的字節(jié)碼文件的容量大小,將會(huì)影響程序最終占用內(nèi)存的大小,而字節(jié)碼文件的大小則是由程序代碼中類的個(gè)數(shù)、變量名稱以及方法名的長(zhǎng)度、字符串以及靜態(tài)常量的長(zhǎng)度和大小等因素決定的。
          ??????在手機(jī)應(yīng)用程序中特別在游戲開發(fā)中,都需要使用各類的資源,使得游戲內(nèi)存豐富多彩,而這些資源將是程序占據(jù)更多資源的原因。同樣的,在游戲場(chǎng)景中,設(shè)計(jì)到很多對(duì)話內(nèi)容,因此涉及到很多文字存儲(chǔ)文件(使用文件存儲(chǔ)而不是在程序中聲明字符串的作用是在需要時(shí)候才讀取內(nèi)容,防止過(guò)多字符串占據(jù)過(guò)大內(nèi)存)。
          ??????聲音也是一種極其占據(jù)內(nèi)存的資源,因此在程序當(dāng)中也需要對(duì)聲效等資源的控制。

          ??????三、內(nèi)存優(yōu)化方法攻略
          ??????1、代碼優(yōu)化
          ??????盡量使用較短的變量名稱和方法名稱,減少類中成員變量跟成員方法的數(shù)量,多使用局部變量而少使用全局變量,減少程序總體的代碼行數(shù),在程序測(cè)試確定無(wú)錯(cuò)情況下可以去掉異常處理的try-catch語(yǔ)句,對(duì)常量跟字符串過(guò)多的程序中使用文件存儲(chǔ)形式以使用時(shí)候再讀取,對(duì)不使用的對(duì)象及時(shí)指向?yàn)閚ull,對(duì)占據(jù)大內(nèi)存的程序或資源的數(shù)據(jù)流讀取使用后及時(shí)釋放資源并使用System.gc()方法回收垃圾資源。
          ??????2、圖片優(yōu)化
          ??????在圖片使用中,我們通常使用圖形壓縮工具或算法對(duì)圖片大小進(jìn)行壓縮,但是這樣的作用僅僅是較小了J2ME程序最終產(chǎn)生的JAR文件包大小,但無(wú)法減少圖片在被使用時(shí)候?qū)?nèi)存的消耗。據(jù)有關(guān)資料介紹,圖片的內(nèi)存在內(nèi)存中的大小只跟圖片被裝載后的高度跟寬度有關(guān),而跟圖片本身體積大小無(wú)關(guān),計(jì)算公式為內(nèi)存占用量=寬*高*像素字節(jié)數(shù)。
          ??????因此在圖片優(yōu)化中可以使用減小圖片的高寬、使用圖片分割編輯工具對(duì)圖片進(jìn)行分割,充分利用圖片的空間;在使用的時(shí)候才載入相關(guān)的圖片,而在無(wú)用的時(shí)候及時(shí)銷毀圖片對(duì)象;對(duì)每一張圖片聲明一個(gè)對(duì)象變量。
          ??????3、聲效資源優(yōu)化
          ??????對(duì)聲音采用字節(jié)流ByteArrayInputStream來(lái)創(chuàng)建Player對(duì)象;在對(duì)聲音對(duì)象的回收前停止聲音的播放;其次在每次播放聲音前先對(duì)聲音對(duì)象進(jìn)行判斷,如對(duì)象存在則先停止后再進(jìn)行播放。
          ??????4、有關(guān)字符串處理
          ??????對(duì)字符串的處理使用StringBuffer來(lái)操作,因?yàn)槭褂梅椒╝ppend時(shí)是同一個(gè)對(duì)象上的操作,而如果采用“+”操作字符串則會(huì)每次創(chuàng)建新的對(duì)象。
          ??????5、對(duì)循環(huán)的優(yōu)化
          ??????盡量在for循環(huán)語(yǔ)句中將size或length等計(jì)算提取到循環(huán)外面,如下所示(對(duì)數(shù)組num{23,13,46,26,22,57}進(jìn)行排序):
          ??????int k = num.length;
          ??????for(int i=0;i<k-1;i++)
          ??????{
          ???????????????for(int j=1;j<k;j++)
          ??????????????????{
          ????????????????????????if(num[i]<=num[j])
          ????????????????????????{
          ???????????????????????????????????int temp = num[i];
          ???????????????????????????????????num[i] = num[j];
          ???????????????????????????????????num[j] =?temp;
          ????????????????????????}
          ??????????????????}
          ???????}
          ????????下篇文章J2ME手機(jī)開發(fā)之內(nèi)存優(yōu)化攻略(續(xù))將繼續(xù)敘述有關(guān)代碼優(yōu)化的內(nèi)存。
          ????????二零零九年二月二十八日于東莞東陽(yáng)光
          ??????? 嚴(yán)正聲明:本文出自即興詩(shī)人blogjava博客,作者經(jīng)過(guò)整理總結(jié)而得,如轉(zhuǎn)載必需與作者聯(lián)系improviser@163.com!



          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭(zhēng)朝夕
          ???? 隱姓埋名/低調(diào)華麗/簡(jiǎn)單生活/完美人生

          posted on 2009-02-28 19:35 poetguo 閱讀(1514) 評(píng)論(0)  編輯  收藏 所屬分類: J2ME

          主站蜘蛛池模板: 石屏县| 含山县| 花垣县| 津市市| 鹤峰县| 北安市| 丽水市| 盐源县| 托克逊县| 咸丰县| 岳池县| 五台县| 鸡西市| 嵊州市| 双鸭山市| 揭阳市| 云和县| 临安市| 辽宁省| 翁牛特旗| 德阳市| 宜宾县| 华容县| 彰武县| 尼玛县| 西充县| 沁源县| 东兴市| 承德县| 中西区| 铅山县| 策勒县| 辽源市| 普宁市| 凉山| 新疆| 土默特左旗| 彩票| 鞍山市| 黄石市| 永川市|