一胧瓜、慎用異常
在java開(kāi)發(fā)中,try-catch語(yǔ)句對(duì)系統(tǒng)性能而言有時(shí)候是非常糟糕的跺株,比如:
int a = 0;
for(int i = 0 ; i<100000;i++){
try{ //在循環(huán)體內(nèi)
a++;
}catch(Exception e){
}
}
嘗試將try-catch放在循環(huán)體外复濒,可以顯著的提升性能,比如:
int a = 0;
try{
for(int i =0;i<100000;i++){
a++;
}
}catch(Exception){
}
二乒省、使用局部變量
調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中臨時(shí)創(chuàng)建的局部變量巧颈、臨時(shí)變量是保存在“棧”中的作儿,速度較快洛二,而其他變量、實(shí)例變量攻锰,類(lèi)下面定義的變量晾嘶,都是在堆中創(chuàng)建,速度較慢娶吞。
局部變量的訪問(wèn)速度遠(yuǎn)遠(yuǎn)高于類(lèi)的成員變量垒迂,所以在開(kāi)發(fā)過(guò)程中,盡量用局部變量妒蛇。
三机断、位運(yùn)算代替乘除
a *= 2; 替換成 a<<1 = 1; 代表將a 左移1位
a /= 2; 替換成 a>>1 = 1; 代表將a右移1位
四、提取重復(fù)代碼
比如:
int[] arr = {1,5,,5,6,6,6,8,,3};
int x = 0 , y = 0 , z = Math.random;
for(int i = 0 ; i < arr.length ; i++){
for(int j = 0 ; i<arr.length ; j++){
//code
x += arr[i]*arr[j] / 3*4*z;
y += arr[i]*arr[j] / 3*4*z;
}
}
以上代碼arr.length計(jì)算了兩次绣夺,重復(fù)計(jì)算吏奸,必然會(huì)帶來(lái)一定的性能損耗,這是一個(gè)簡(jiǎn)單的例子陶耍,這里可以改進(jìn)為:
int[] arr = {1,5,,5,6,6,6,8,,3};
int len = arr.length; //將重復(fù)的arr.length提取出來(lái)
int x = 0 , y = 0 , z = Math.random , k = 3*4*z; //將重復(fù)的3*4*z提取出來(lái)
for(int i = 0 ; i < len ; i++){
for(int j = 0 ; i<len ; j++){
//code
x += arr[i]*arr[j] / k;
y += arr[i]*arr[j] / k;
}
}
代碼不是很?chē)?yán)謹(jǐn)奋蔚,只是舉個(gè)例子
五、展開(kāi)循環(huán)
展開(kāi)循環(huán)是一種不常用的烈钞,極端條件下才用到的優(yōu)化手段
比如:
int[] arr = new int[99999];
for(int i = 0 ;i <99999 ; i++){
arr[i] = i;
}
增加一次循環(huán)的賦值次數(shù)泊碑,減少循環(huán)次數(shù)
int[] arr = new int[99999];
for(int i = 0 ;i <99999 ; i+=3){ //展開(kāi)循環(huán),完成原來(lái)3個(gè)循環(huán)的工作現(xiàn)在一個(gè)就能完成
arr[i] = i;
arr[i+1] = i+1;
arr[i+2] = i+2;
}
六毯欣、使用arrayCopy()
如果程序中要進(jìn)行數(shù)組的復(fù)制操作馒过,那么使用這個(gè)函數(shù)將比自己設(shè)計(jì)的算法性能要好得多。(因?yàn)镾ystem.arraycopy()是native函數(shù)酗钞,通常native函數(shù)的性能要優(yōu)于普通的函數(shù))
使用方法:
//arr代表原數(shù)組腹忽,第一個(gè)0代表開(kāi)始復(fù)制的位置来累,newArr代表新數(shù)組,第二個(gè)0代表復(fù)制的位置留凭,size代表復(fù)制的長(zhǎng)度佃扼。
System.arraycopy(arr, 0 , newArr , 0 , size );
七、其他
比如還有
一維數(shù)組代替二維數(shù)組
使用Buffer進(jìn)行I/O操作
使用clone()代替new
靜態(tài)方法替代實(shí)例方法
集合框架的應(yīng)用場(chǎng)景
.......
學(xué)無(wú)止境