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

Java學習:解決J2ME中的內存洩漏

編輯:JAVA編程入門知識
  不知道主題為"J2ME中的內存洩漏"是否妥當,不過在J2ME中假如處理不好資源的創建和釋放問題,也會出現類似在CC++中的內存洩漏現象。
  
  J2ME中最常使用的資源無非是圖片和聲音。為了提高游戲的運行速度,我們通常把它們聲明為全局變量,又由於手機的內存的關系,我們不能把這些資源同時加載進內存,所以我們會在使用的時候導入資源(創建對象),而把暫時不需要的資源(圖片或聲音)對象賦值為null(當然這是我的做法,不知道是否和大家一樣)。在這期間假如處理不好,就會有些資源對象的在內存中沒有清除干淨,就會造成內存洩漏,結果就是可用內存越來越小。下面我就舉例說明。
  
  1.圖片資源
  要點:要為每一個圖片資源聲明一個對象變量
  假設在一個程序聲明了2個圖片對象:
  Image pic1,pic2;
  假如在某一時刻要使用pic1和pic2則:
  if(pic1==null)pic1=Image.createImage("/1.png");
  if(pic2==null)pic2=Image.createImage("/2.png");
  當這些圖片用完後,就應當:
  pic1=null;
  pic2=null;
  假如需要使用另外兩個圖片3.png和4.png,則最好另聲明兩個變量對象pic3,pic4來導入它們,不要使用pic1,pic2變量來導入這兩個圖片,如:
  if(pic1==null)pic1=Image.createImage("/3.png");//不要這樣做
  if(pic2==null)pic2=Image.createImage("/4.png");//不要這樣做
  因為這樣做會影響垃圾收集器對pic1,pic2對象的回收工作,從而造成內存回收不干淨。
  
  2.聲音資源(不同的平台對聲音的處理方式不同)
  
  要點:和圖片資源一樣,另外在回收聲音資源一定要停止聲音的播放;還有在每次開始播放聲音前,也要先判定一下聲音的狀態(簡單點,直接調用stop,先讓聲音停下來,然後再播放),假如不先停止聲音的播放,再調用其運行播放,可能會生成無法回收的對象(這是本人猜測的)造成內存的洩漏。
  
  如:
  假設sound為聲音對象
  釋放sound資源:
   if(sound!=null)
   {
   sound.stop();
   sound=null;
   }
  這樣sound的資源就可以安全的被垃圾回收器收回了
  播放聲音資源:
   if(sound!=null)
   {
   sound.stop();
   sound.start();
   }
  以上就是我的經驗之談,也許有錯誤的地方請大家原諒。謝謝
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved