Java代码优化方案 J2ME内存优化
從幾本書上,N個網(wǎng)站上整理的一些JAVA代碼優(yōu)化方案,最近的項目只有1M內(nèi)存可用,必須很摳門了~J2ME項目更要注意的
避免內(nèi)存溢出
l 不用的對象釋放(置空)
如 :
a不為空時 a=new object()//這句代碼執(zhí)行時將有兩個對象存在于內(nèi)存中
較好的寫法是a=null; a=new object();
不用的對象設(shè)置成null
l 內(nèi)存溢出通常發(fā)生在構(gòu)造函數(shù)中,在構(gòu)造函數(shù)中變量在要用時再new,用完之后置null
一次性加載所有圖片很容易造成內(nèi)存峰值。
可以用 if(img==null){
Create…
}
l 考慮用靜態(tài)工廠方法替代構(gòu)造函數(shù)(但是,注意釋放,單例模式的釋放只能由自己來做)。
l 使用局部變量
l 圖形重繪操作用部分重繪
l 避免在同一個類中通過調(diào)用get set來設(shè)置或調(diào)用變量,用public
l 避免在循環(huán)中生成同一個變量或調(diào)用同一個函數(shù)
l 常用變量盡可能用static final private
l 能用byte的就不用int,String
l 不要使用double
l 復制大量數(shù)據(jù)時用System.appaycopy()
l 避免使用泛型
l 盡量不使用try catch,必須使用時不要在循環(huán)體內(nèi)寫try catch
l 字符串操作使用StringBuffer
代碼2是代碼1執(zhí)行速度的兩倍:
代碼1:
String title=new String(“大家好”);
Title+=”歡迎”;
Title+=”閱讀”
//會在棧中生成五個對象:“大家好”,“歡迎”,“閱讀”,“大家好歡迎”,“大家好歡迎閱讀”
代碼2:
StringBuffer title=new StringBuffer(“大家好”);
Tltle.append(“歡迎”);
Title.append(“閱讀”);
l StringBuffer的構(gòu)造器會創(chuàng)建一個默認大小(通常是16)的字符數(shù)組。在使用中,如果超出這個大小,就會重新分配內(nèi)存,創(chuàng)建一個更大的數(shù)組,并將原先的數(shù)組復制過來,再丟棄舊的數(shù)組。在大多數(shù)情況下,你可以在創(chuàng)建StringBuffer的時候指定大小,這就避免了在容量不夠的時候自動增長,以提高性能。
l 使用零值做為判斷條件
For(int i=a.length()-1;i>=0;i--) 優(yōu)于 for(int i=0;i<a.length();i++)
l 不要重復初始化變量
默認情況下,調(diào)用類的構(gòu)造函數(shù)時, Java會把變量初始化成確定的值:所有的對象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和 double變成0.0,邏輯值設(shè)置成false
l 乘法和除法用移位 ,除法比乘法慢,所以用乘于倒數(shù)來代替除法
考慮下面的代碼:
for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
用移位操作替代乘法操作可以極大地提高性能。下面是修改后的代碼:
for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }
l 傳遞盡可能少的參數(shù)到經(jīng)常調(diào)用的方法
l 不要有空方法,或方法內(nèi)代碼很少而方法又很少調(diào)用
l 避免類型轉(zhuǎn)換
使用Profiler去查找哪里需要優(yōu)化
改進你的算法,寫最優(yōu)的代碼
轉(zhuǎn)載于:https://www.cnblogs.com/yangyh/archive/2009/08/13/1544819.html
總結(jié)
以上是生活随笔為你收集整理的Java代码优化方案 J2ME内存优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《码出高效:Java 开发手册》“码”
- 下一篇: Python 植物大战僵尸代码实现