一.代碼優化
內存會溢出肯定和代碼逃不了關系,99.99%學java的人都知道垃圾回收器是java的一大優點并據此來嘲笑C++。顯然這個特性為代碼編寫者省了不少事,但這個特性卻帶來了不少隱患。舉個例子在 把所有對象的初始化放在構造函數里想必是再正當不過了,大多數人通常的做法是把當前邏輯所要用到的資源通通初始化完畢。 很大一部份的內存溢出都是發生在構造函數中。內存使用的高峰期都是在構造函數中所以避開這個高峰能有效的防止溢出。建議最好的辦法是第一次使用時初始化。如下所示 if(img==null){ //初始化 } 現在做游戲很多時候都需要地圖數組,聲音數組,還有一些其它資源這些資源很多可以放在代碼中也有的可以放在文件當中。 強烈建議將這些資源放在文件中需要時在load進來。這些資源文件如果放在代碼中則會占用不小的代碼段空間,而代碼一般是程序一運行就裝載到內存當中。 除上面列舉的方法外還有一些大家所熟知的順便一提,比如關閉沒用的rms,關閉沒用的網絡連接,關閉沒用的流。正確地停止線程。良好的程序架構減少代碼偶合性也是一個不錯的方法,無論在代碼調式,內存釋放都可以做到非常清析。 二.圖片優化 j2me的內存殺手無疑非圖片莫屬,一張3k的圖片可以占用20多k的內存不信大家把load前后的內存剩余打印出來對比看看。所以防止內存溢出最直接的辦法就是從圖片入手。 1.圖片壓縮:多數人馬上會想到這個辦法。不錯這個辦法是最有效的。在photoshop里圖片制作完成后不要選擇"存儲為",而是選擇"存儲為web所用格式"可以根據里面的選項進行壓縮,特別是顏色這一項越小越好不過相應的圖像會有所失真。不要認為這樣就完了。 實際上該圖片還可以再次壓縮,在網上有許多類似的工具。推薦一款可以壓縮png格式的軟件xat.comImageOptimizer效果不錯。經常都有70%的壓縮率且圖像不會失真。 假如你有多張規格一樣的圖片,那么建議你把它做成一張長條圖片。有兩個原因: 1、這樣節省存儲空間和內存空間。大家可做個試驗將10張圖片的內容放在一張當中對比看看文件大小有沒有變化。 2、10張圖片需要10個image對象需要進行10次io操作浪費時間不說還浪費內存。當筆者發現這個好處時興奮地把所有圖片都存成一張,吱地一聲內存又溢出了...原因想必大家也知道!!圖片太大了不要把不同界面的圖片整合在一起否則經常會得不償失。 作圖時還有一些細節需要注意,顏色數量,分辯率,圖像模式(最好是索引顏色),畫布大小都會影響到圖片大小。 三.工具優化 誰都知道混淆器是用來保護代碼的以加大反編譯的難度(個人認為這是在嘲笑程序員的智商)。實際上用它來優化程序也是不錯的選擇,至少有兩點好處: 1、壓縮程序大小。一個60k的程序經??梢詨旱?0k左右。10k的空間對于寫低端手機的程序員簡直是雪中送碳,多少超過64k限制的游戲都受過它的恩惠; 2、節省內存空間。用腳去想也想得出來代碼少了內存里的代碼段自然就短了。
新聞熱點
疑難解答