開發J2ME應用程序時,out momory內存溢出這種痛苦經常經常出現,所以J2ME應用程序內存的優化是非常必要而必須的,這裡向大家簡單描述一下,相信本文介紹一定會讓你有所收獲。
J2ME應用程序內存優化
開發J2ME應用程序時,out momory內存溢出這種痛苦經常經常出現。要知道在手機上用內存必須勒緊褲腰帶,手機是以K來計算的。寫手機程序讓人回到了8086時代。J2ME應用程序內存的優化是非常必要而必須的。
一.代碼優化
內存會溢出肯定和代碼逃不了關系,垃圾回收器是Java的一大優點,顯然這個特性為代碼編寫者省了不少事,但這個特性卻帶來了不少隱患。
舉個例子在游戲當中經常有不同場景的切換,如從游戲邏輯退到主菜單邏輯,對游戲邏輯對象的態度,很多人會選擇忘記內存的釋放,就等著垃圾回收器自己來善後。但是實際上垃圾回收器並非實時的,它不像C++的Delete語句馬上釋放不用的內存。當從游戲邏輯切換到主菜單邏輯這時兩個對象同時存在很可能這時內存就不夠用了。
實際上垃圾回收器在j2me上並不怎麼好用,在J2ME上所有垃圾手工釋放才比較直接有效,除簡單類型以外所有對象都必須顯式地置空例如 imgs=null; 實際上java提供了一個不錯的工具用來查找內存溢出,Java.lang.Runtime.freeMemory() 。它可以返回當前的剩余內存數,將它適當的安放在代碼中可以有效的監測內存使用狀況。
有一部份的J2ME程序員寫代碼存在不良習慣。
例1:
- //a 不為空
- a=new menu();
這裡面包含兩個問題:
1. 該段代碼是先創建對象然後再進行賦值操作的,也就是說在這期間有兩個對象同時存在這就很可能會產生溢出。
2. 這樣做也會妨礙垃圾回收器的工作
較好的寫法如下:
- a=null;
- System.gc(); // 回收a以前引用的對象
- a=new menu();
雖然麻煩了點但在J2ME中還是必要的。
例2:
drawString(”游戲