程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 解決JavaME中的內存洩漏

解決JavaME中的內存洩漏

編輯:J2ME
不知道主題為"JavaME中的內存洩漏"是否妥當,不過在J2ME中如果處理不好資源的創建和釋放問題,也會出現類似在C\C++中的內存洩漏現象。

JavaME中最常使用的資源無非是圖片和聲音。為了提高游戲的運行速度,我們通常把它們聲明為全局變量,又由於手機的內存的關系,我們不能把這些資源同時加載進內存,所以我們會在使用的時候導入資源(創建對象),而把暫時不需要的資源(圖片或聲音)對象賦值為(當然這是我的做法,不知道是否和大家一樣)。在這期間如果處理不好,就會有些資源對象的在內存中沒有清除干淨,就會造成內存洩漏,結果就是可用內存越來越小。下面我就舉例說明。

1.圖片資源
要點:要為每一個圖片資源聲明一個對象變量
假設在一個程序聲明了2個圖片對象:
Image pic1,pic2;
如果在某一時刻要使用pic1和pic2則:
if(pic1==)pic1=Image.createImage("/1.png");
if(pic2==)pic2=Image.createImage("/2.png");
當這些圖片用完後,就應當:
pic1=;
pic2=;
如果需要使用另外兩個圖片3.png和4.png,則最好另聲明兩個變量對象pic3,pic4來導入它們,不要使用pic1,pic2變量來導入這兩個圖片,如:
if(pic1==)pic1=Image.createImage("/3.png");//不要這樣做
if(pic2==)pic2=Image.createImage("/4.png");//不要這樣做
因為這樣做會影響垃圾收集器對pic1,pic2對象的回收工作,從而造成內存回收不干淨。

2.聲音資源(不同的平台對聲音的處理方式不同)
    http://dba8.cn
    http://www.dba8.cn
    http://www.Oracle-bbs.com

要點:和圖片資源一樣,另外在回收聲音資源一定要停止聲音的播放;還有在每次開始播放聲音前,也要先判斷一下聲音的狀態(簡單點,直接調用stop, 先讓聲音停下來,然後再播放),如果不先停止聲音的播放,再調用其運行播放,可能會生成無法回收的對象(這是本人猜測的)造成內存的洩漏。

如:
假設sound為聲音對象
釋放sound資源:
if(sound!=)
{
sound.stop();
sound=;
}
這樣sound的資源就可以安全的被垃圾回收器收回了
播放聲音資源:
if(sound!=)
{
sound.stop();
sound.start();
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved