Java學習:J2ME中的內存泄漏

發表于:2007-05-25來源:作者:點擊數: 標簽:java泄漏j2me內存學習
不知道主題為“ J2ME 中的內存泄漏”是否妥當,不過在J2ME中如果處理不好資源的創建和釋放問題,也會出現類似在C\C++中的內存泄漏現象。 J2ME中最常使用的資源無非是圖片和聲音。為了提高 游戲 的運行速度,我們通常把它們聲明為全局變量,又由于手機的內存

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

    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();
         }
  以上就是我的經驗之談,也許有錯誤的地方請大家原諒。謝謝




原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97