<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    konhon

    忘掉過去,展望未來。找回自我,超越自我。
    逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

    Google

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
    out momory 一陣天旋地轉(zhuǎn)內(nèi)存又溢出了。在手機(jī)上這種痛苦經(jīng)常都有,套一句俗話在手機(jī)上用內(nèi)存必須勒緊褲腰帶。雖然現(xiàn)在pc內(nèi)存上G都不奇怪,可是在手機(jī)上卻只能以K來記,可能某位同志會馬上跳出來說也有上M的,記住中國還不富大多數(shù)手機(jī)都是低端手機(jī)。寫手機(jī)程序讓我仿佛回到了dos時代(自我安慰一下那個時代也煉出了不少高手說不定我是下一個)。言歸正傳做內(nèi)存優(yōu)化可以歸結(jié)為以下幾種方法。代碼優(yōu)化,圖片優(yōu)化,第三方工具優(yōu)化等…

    一.代碼優(yōu)化
    內(nèi)存會溢出肯定和代碼逃不了關(guān)系,99.99%學(xué)java的人都知道垃圾回收器是java的一大優(yōu)點并據(jù)此來嘲笑C++。顯然這個特性為代碼編寫者省了不少事,但這個特性卻帶來了不少隱患。舉個例子在游戲當(dāng)中經(jīng)常有不同場景的切換,如從游戲邏輯退到主菜單邏輯,對游戲邏輯對象的態(tài)度很多人會選擇忘記等待垃圾回收器來收尸^_^。乍看之下似乎并無不妥垃圾回收器會來善后。實際上垃圾回收器并非實時的,它不像C++的Delete語句馬上釋放不用的內(nèi)存。當(dāng)從游戲邏輯切換到主菜單邏輯這時兩個對象同時存在很可能這時內(nèi)存就不夠用了。讀到這里很多人會發(fā)現(xiàn)實際上垃圾回收器在j2me上并不怎么好用,從一個角度上來講在j2me上所有垃圾必須由手工釋放,除簡單類型以外所有對象都必須顯式地置空例如 imgs=null; 實際上java提供了一個不錯的工具用來查找內(nèi)存溢出,java.lang.Runtime.freeMemory() 。它可以返回當(dāng)前的剩余內(nèi)存數(shù),將它適當(dāng)?shù)陌卜旁诖a中可以有效的監(jiān)測內(nèi)存使用狀況。很大一部份的j2me程序員之前都是從事pc軟件開發(fā)工作,充裕的內(nèi)存掩蓋了許多寫代碼的不良習(xí)慣。如下所示:
    //a 不為空
    a=new Logic();
    很多人可能對此有異議,他們會認(rèn)為新的對象會把舊的對象沖掉并且釋放內(nèi)存。這里面包含兩個問題:1. 該段代碼是先創(chuàng)建對象然后再進(jìn)行賦值操作的,也就是說在這期間有兩個對象同時存在這就很可能會產(chǎn)生溢出。2. 這樣做也會妨礙垃圾回收器的工作
    較好的寫法如下:
    a=null;
    a=new Logic();
    雖然麻煩了點但在j2me中還是必要的。接著看下例。
    drawString("游戲時間:" + time ,50,50,Graphics.LEFT|Graphics.TOP);
    "游戲時間:" + time 很完美在paint()方法當(dāng)中每次都被刷一遍顯示在屏幕上。危機(jī)往往隱藏在美麗的外表,該語句會引起新的內(nèi)存重新分配來存儲 "游戲時間:" + time 而顯示完以后又必須由垃圾回收器釋放,用了雙倍時間,并且容易發(fā)生內(nèi)存溢出。依此類推在重復(fù)執(zhí)行的方法里應(yīng)盡量避免重復(fù)定義對象。與paint()方法類似在循環(huán)里也有類似的情況存在。
    把所有對象的初始化放在構(gòu)造函數(shù)里想必是再正當(dāng)不過了,大多數(shù)人通常的做法是把當(dāng)前邏輯所要用到的資源通通初始化完畢。
    很大一部份的內(nèi)存溢出都是發(fā)生在構(gòu)造函數(shù)中。內(nèi)存使用的高峰期都是在構(gòu)造函數(shù)中所以避開這個高峰能有效的防止溢出。建議最好的辦法是第一次使用時初始化。如下所示
    if (img==null){
    //初始化
    }
    現(xiàn)在做游戲很多時候都需要地圖數(shù)組,聲音數(shù)組,還有一些其它資源這些資源很多可以放在代碼中也有的可以放在文件當(dāng)中。
    強(qiáng)烈建議將這些資源放在文件中需要時在load進(jìn)來。這些資源文件如果放在代碼中則會占用不小的代碼段空間,而代碼一般是程序一運行就裝載到內(nèi)存當(dāng)中。
    除上面列舉的方法外還有一些大家所熟知的順便一提, 比如關(guān)閉沒用的rms ,關(guān)閉沒用的網(wǎng)絡(luò)連接,關(guān)閉沒用的流。正確地停止線程。良好的程序架構(gòu)減少代碼偶合性也是一個不錯的方法,無論在代碼調(diào)式,內(nèi)存釋放都可以做到非常清析。

    二. 圖片優(yōu)化
    j2me的內(nèi)存殺手無疑非圖片莫屬,一張3k的圖片可以占用20多k的內(nèi)存不信大家把load前后的內(nèi)存剩余打印出來對比看看。所以防止內(nèi)存溢出最直接的辦法就是從圖片入手。
    1.圖片壓縮: 多數(shù)人馬上會想到這個辦法。不錯這個辦法是最有效的。在photoshop里圖片制作完成后不要選擇 "存儲為",而是選擇 "存儲為 web 所用格式" 可以根據(jù)里面的選項進(jìn)行壓縮,特別是顏色這一項越小越好不過相應(yīng)的圖像會有所失真。不要認(rèn)為這樣就完了。
    實際上該圖片還可以再次壓縮,在網(wǎng)上有許多類似的工具。推薦一款可以壓縮png格式的軟件 xat.com Image Optimizer 效果不錯。經(jīng)常都有 70% 的壓縮率且圖像不會失真。
    假如你有多張規(guī)格一樣的圖片,那么建議你把它做成一張長條圖片。有兩個原因:
    1、 這樣節(jié)省存儲空間和內(nèi)存空間。大家可做個試驗將10張圖片的內(nèi)容放在一張當(dāng)中對比看看文件大小有沒有變化。
    2 、10張圖片需要10個image 對象需要進(jìn)行10次io操作浪費時間不說還浪費內(nèi)存。當(dāng)筆者發(fā)現(xiàn)這個好處時興奮地把所有圖片都存成一張,吱地一聲內(nèi)存又溢出了...原因想必大家也知道!!圖片太大了不要把不同界面的圖片整合在一起否則經(jīng)常會得不償失。
    作圖時還有一些細(xì)節(jié)需要注意,顏色數(shù)量,分辯率,圖像模式(最好是索引顏色),畫布大小都會影響到圖片大小。

    三. 工具優(yōu)化
    誰都知道混淆器是用來保護(hù)代碼的以加大反編譯的難度(個人認(rèn)為這是在嘲笑程序員的智商)。實際上用它來優(yōu)化程序也是不錯的選擇,至少有兩點好處:1、 壓縮程序大小。一個60k的程序經(jīng)常可以壓掉10k左右。10k的空間對于寫低端手機(jī)的程序員簡直是雪中送碳,多少超過64k限制的游戲都受過它的恩惠;2、節(jié)省內(nèi)存空間。用腳去想也想得出來代碼少了內(nèi)存里的代碼段自然就短了。
    根據(jù)經(jīng)驗很多人都會用jb自帶的混淆器RetroGuard,實際上它效果并不怎么好。推薦使用proguard 在 http://sf.net 可以免費下載,它可以比retroguard 多壓縮3至4 k 以上而且安全性更好。
    posted on 2005-08-31 19:10 konhon 優(yōu)華 閱讀(368) 評論(0)  編輯  收藏 所屬分類: J2me
    主站蜘蛛池模板: 久久久久se色偷偷亚洲精品av| 亚洲成a人片在线观看播放| AV激情亚洲男人的天堂国语| 久久WWW免费人成人片| 亚洲日本乱码卡2卡3卡新区| 成年女人18级毛片毛片免费 | 亚洲欧洲校园自拍都市| 污视频在线免费观看| 亚洲美女aⅴ久久久91| 日本在线高清免费爱做网站| 亚洲天堂2017无码中文| 四虎免费在线观看| 老外毛片免费视频播放| 色久悠悠婷婷综合在线亚洲| 色欲A∨无码蜜臀AV免费播| 亚洲成人在线免费观看| 好爽…又高潮了免费毛片| 黄色免费网站在线看| 亚洲熟妇丰满多毛XXXX| 免费无遮挡无码永久视频| 亚洲国产精品yw在线观看| 免费观看男人免费桶女人视频| 在线播放亚洲精品| 国产亚洲精久久久久久无码77777| 精品成人免费自拍视频| 亚洲日韩国产精品无码av| 日韩在线免费看网站| aaa毛片免费观看| 亚洲毛片在线免费观看| 国产大片51精品免费观看| 中文字幕免费观看视频| 亚洲国产精品线观看不卡| 亚洲成av人片在线观看天堂无码 | 久久99国产综合精品免费| 亚洲一线产品二线产品| 久久久久亚洲爆乳少妇无| 人禽杂交18禁网站免费| 国产无遮挡色视频免费观看性色| 亚洲美女人黄网成人女| 亚洲欧洲中文日韩av乱码| 青青青免费国产在线视频小草|