一.代碼優化
內存會溢出肯定和代碼逃不了關系,99.99%學java的人都知道垃圾回收器是java的一大優點並據此來嘲笑C++。顯然這個特性為代碼編寫者省了不少事,但這個特性卻帶來了不少隱患。舉個例子在游戲當中經常有不同場景的切換,如從游戲邏輯退到主菜單邏輯,對游戲邏輯對象的態度很多人會選擇忘記等待垃圾回收器來收屍。乍看之下似乎並無不妥垃圾回收器會來善後。實際上垃圾回收器並非實時的,它不像C++的Delete語句馬上釋放不用的內存。當從游戲邏輯切換到主菜單邏輯這時兩個對象同時存在很可能這時內存就不夠用了。讀到這裡很多人會發現實際上垃圾回收器在j2me上並不怎麼好用,從一個角度上來講在J2ME上所有垃圾必須由手工釋放,除簡單類型以外所有對象都必須顯式地置空例如imgs=null;實際上java提供了一個不錯的工具用來查找內存溢出,Java.lang.Runtime.freeMemory()。它可以返回當前的剩余內存數,將它適當的安放在代碼中可以有效的監測內存使用狀況。很大一部份的J2ME程序員之前都是從事pc軟件開發工作,充裕的內存掩蓋了許多寫代碼的不良習慣。如下所示:
//a不為空
a=newLogic();
很多人可能對此有異議,他們會認為新的對象會把舊的對象沖掉並且釋放內存。這裡面包含兩個問題:1.該段代碼是先創建對象然後再進行賦值操作的,也就是說在這期間有兩個對象同時存在這就很可能會產生溢出。2.這樣做也會妨礙垃圾回收器的工作
較好的寫法如下:
a=null;
a=newLogic();
雖然麻煩了點但在J2ME中還是必要的。接著看下例。
drawString("游戲