J2ME手機開發記憶體優化三招

2022-12-19 16:12:03 字數 1926 閱讀 7107

[錄入者:admin |時間:2006-04-18 09:53:05 |作者:未知|**:未知|點選數:235 ]

out momory一陣天旋地轉記憶體又溢位了。在手機上這種痛苦經常都有,套一句俗話在手機上用記憶體必須勒緊褲腰帶。雖然現在pc記憶體上g都不奇怪,可是在手機上卻只能以k來記,可能某位同志會馬上跳出來說也有上m的,記住中國還不富大多數手機都是低端手機。

寫手機程式讓我彷彿回到了dos時代(自我安慰一下那個時代也煉出了不少高手說不定我是下乙個)。言歸正傳做記憶體優化可以歸結為以下幾種方法。**優化,**優化,第三方工具優化等…

一.**優化

記憶體會溢位肯定和**逃不了關係,99.99%學j**a的人都知道垃圾**器是j**a的一大優點並據此來嘲笑c++。顯然這個特性為**編寫者省了不少事,但這個特性卻帶來了不少隱患。

舉個例子在遊戲當中經常有不同場景的切換,如從遊戲邏輯退到主選單邏輯,對遊戲邏輯物件的態度很多人會選擇忘記等待垃圾**器來收屍。乍看之下似乎並無不妥垃圾**器會來善後。實際上垃圾**器並非實時的,它不像c++的delete語句馬上釋放不用的記憶體。

當從遊戲邏輯切換到主選單邏輯這時兩個物件同時存在很可能這時記憶體就不夠用了。讀到這裡很多人會發現實際上垃圾**器在j2me上並不怎麼好用,從乙個角度上來講在j2me上所有垃圾必須由手工釋放,除簡單型別以外所有物件都必須顯式地置空例如imgs=null;實際上j**a提供了乙個不錯的工具用來查詢記憶體溢位,它可以返回當前的剩餘記憶體數,將它適當的安放在**中可以有效的監測記憶體使用狀況。很大一部份的j2me程式設計師之前都是從事pc軟體開發工作,充裕的記憶體掩蓋了許多寫**的不良習慣。

如下所示:

//a不為空a=new logic();

很多人可能對此有異議,他們會認為新的物件會把舊的物件沖掉並且釋放記憶體。這裡面包含兩個問題:1.

該段**是先建立物件然後再進行賦值操作的,也就是說在這期間有兩個物件同時存在這就很可能會產生溢位。2.這樣做也會妨礙垃圾**器的工作較好的寫法如下:

a=null;a=new logic();

雖然麻煩了點但在j2me中還是必要的。接著看下例。

drawstring("遊戲時間:" + time ,50,50,

"遊戲時間:" + time很完美在paint()方法當中每次都被刷一遍顯示在螢幕上。危機往往隱藏在美麗的外表,該語句會引起新的記憶體重新分配來儲存"遊戲時間:

" + time而顯示完以後又必須由垃圾**器釋放,用了雙倍時間,並且容易發生記憶體溢位。依此類推在重複執行的方法裡應盡量避免重複定義物件。與

paint()方法類似在迴圈裡也有類似的情況存在。

把所有物件的初始化放在建構函式裡想必是再正當不過了,大多數人通常的做法是把當前邏輯所要用到的資源通通初始化完畢。

很大一部份的記憶體溢位都是發生在建構函式中。記憶體使用的高峰期都是在建構函式中所以避開這個高峰能有效的防止溢位。建議最好的辦法是第一次使用時初始化。如下所示

if (img==null)

現在做遊戲很多時候都需要地圖陣列,聲音陣列,還有一些其它資源這些資源很多可以放在**中也有的可以放在檔案當中。

強烈建議將這些資源放在檔案中需要時在load進來。這些資源檔案如果放在**中則會占用不小的**段空間,而**一般是程式一執行就裝載到記憶體當中。

除上面列舉的方法外還有一些大家所熟知的順便一提,比如關閉沒用的rms,關閉沒用的網路連線,關閉沒用的流。正確地停止執行緒。良好的程式架構減少**偶合性也是乙個不錯的方法,無論在**調式,記憶體釋放都可以做到非常清析。

二.**優化

j2me的記憶體殺手無疑非**莫屬,一張3k的**可以占用20多k的記憶體不信大家把load前後的記憶體剩餘列印出來對比看看。所以防止記憶體溢位最直接的辦法就是從**入手。

1.**壓縮:多數人馬上會想到這個辦法。不錯這個辦法是最有效的。

在photoshop裡**製作完成後不要選擇"儲存為",而是選擇"儲存為web所用格式"可以根據裡面的選項進行壓縮,特別是顏色這一項越小越好不過相應的影象會有所失真。不要認為這樣就完了。

J2ME專案總結

課程結業設計報告 課程 j2me程式開發與設計 專案名稱 專業班級 組別 3組 組長組員 指導教師肖 2012年6月 目錄1 專案概述 1 1.1內容 1 1.2功能 1 1.3意義 1 2 專案實施 2 2.1 開發計畫 2 2.2主要功能模組說明 2 2.2.1 功能表 2 2.2.2 表 2 ...

J2ME相簿管理

2.2 j2me與web的http連線 web由客戶與伺服器組成。客戶是簡單由tcp ip加上web瀏覽器組成,web伺服器由http加後台資料庫組成。客戶的瀏覽器和伺服器用tcp ip的http 超文字傳輸協議 建立連線,使得客戶與伺服器二者的超 傳輸變得很容易。所有的客戶及web伺服器統一使用t...

cookie技術在J2ME平台的應用

本文向大家簡單介紹一下cookie技術在j2me平台的應用與實現,首先,我們來看一下cookie的原理。當伺服器需要和瀏覽器維持某一狀態的時候,例如需要記錄使用者的購物車中已經購買的商品。這時候伺服器可以新建乙個cookie並把它寫入到響應中,瀏覽器從響應中接收到cookie並儲存起來。cookie...