優(yōu)化實(shí)踐
1.try{}catch(){}使用
1)查詢中不要使用try{}catch(){}語(yǔ)句
2)循環(huán)中不要使用try{}catch(){}語(yǔ)句
3)異常處理
不要對(duì)于所有的異常捕獲都使用Exception,最好是捕獲對(duì)應(yīng)的異常類型澈圈,處理日志方式:
1普碎、打印錯(cuò)誤日志
2劫扒、調(diào)用錯(cuò)誤業(yè)務(wù)邏輯處理函數(shù)
?3湃望、跳轉(zhuǎn)錯(cuò)誤提示頁(yè)面
4)finally中銷毀對(duì)象或釋放資源
? ? ? ? ? finally塊代碼無(wú)論try{}catch(){}是否發(fā)生異常都會(huì)被訪問(wèn)拍屑,所以在這里可以做一些資源的釋放丙唧、對(duì)象的銷毀工作凡蜻,減少不必要的資源占用办桨。
5 ) 對(duì)外提供的接口有異常則拋出
try
{
? ? ? ? ? os.write(byteBuffer);
} catch (Exception e)
{
? ? ? ? ?e.printStackTrace();
} finally
{
? ? ? ? os.close();// 釋放資源
? ? ? ? os = null;
? ? ? ? destfile = null;
}
2.減少使用new關(guān)鍵字創(chuàng)建對(duì)象
1)避免在循環(huán)中使用new關(guān)鍵字創(chuàng)建對(duì)象
?以10000次為測(cè)試標(biāo)準(zhǔn)筹淫,結(jié)果是:循環(huán)耗時(shí):16ms;如果將new Object();注釋掉呢撞,打印的結(jié)果是:循環(huán)耗時(shí):0ms损姜;由此看出對(duì)象的創(chuàng)建是一筆不小 ?的開銷。
?2)有必要?jiǎng)?chuàng)建對(duì)象時(shí)才進(jìn)行創(chuàng)建
3.乘除法是否可以使用移位運(yùn)算
1)乘數(shù)或除數(shù)是否是2的平方根
2)乘除運(yùn)算在循環(huán)中反復(fù)出現(xiàn)
4.注意循環(huán)的寫法
1)減少循環(huán)次數(shù)變量的讀取
2)循環(huán)中嵌套循環(huán)將小循環(huán)寫在外層
3)不要在循環(huán)中頻繁聲明對(duì)象
4)循環(huán)中不要調(diào)用同步方法
5)盡量避免循環(huán)中執(zhí)行db查詢操作
5.實(shí)現(xiàn)字符串拼接
1)String殊霞、StringBuffer摧阅、StringBuilder
String ?不可變字符數(shù)據(jù)類的拼接,每次使用“+=”時(shí)都相當(dāng)于引入了一個(gè)中間的臨時(shí)變量,不推薦绷蹲。
StringBuilder 可變字符串對(duì)象棒卷,線程不安全顾孽,不推薦。
可變字符串對(duì)象比规,線程安全若厚,當(dāng)前線程只有一個(gè)StringBuffer對(duì)象在實(shí)現(xiàn)字符串長(zhǎng)度的修改變化,推薦蜒什。
2)單個(gè)字符相加用’’代替””
對(duì)于單個(gè)字符测秸,用StringBuffer有些浪費(fèi),由于’’作用的是char類型的數(shù)據(jù)所以比String要適合吃谣。
6.提升HashMap遍歷效率
Hashmap實(shí)現(xiàn)了Map接口乞封,其底層是用Entry對(duì)象來(lái)操作key和value的,Map的遍歷實(shí)就是利用Hash值取出相應(yīng)的Entry做比較得到結(jié)果岗憋。
for(Entry entry : paraMap.entrySet())
{
? ? ? ? ? ? values?=?entry.getValue();
? ? ? ? ? ? ? ?//?System.out.println(values[0]);
}
7.盡量使用局部變量
調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧(Stack)中肃晚,速度較快。其他變量仔戈,如靜態(tài)變量关串、實(shí)例變量等,都在堆(Heap)中創(chuàng)建监徘,速度較慢晋修。
8.盡量實(shí)現(xiàn)對(duì)象重用
1)字符串對(duì)象重用(StringBuffer)
2)聲明對(duì)象的重用(for循環(huán))
3)減少對(duì)象初始化(單例模式)
默認(rèn)情況下,調(diào)用類的構(gòu)造函數(shù)時(shí)凰盔, Java會(huì)把變量初始化成確定的值:所有的字符串變量被設(shè)置成null墓卦,整數(shù)變量(byte、short户敬、int落剪、long)設(shè)置成0,float和double變量設(shè)置成0.0尿庐,邏輯值設(shè)置成false忠怖。
4)合理使用繼承和抽象
9.將閑置的資源進(jìn)行釋放
1)記得斷開數(shù)據(jù)庫(kù)訪問(wèn)鏈接
2)記得關(guān)閉I/O輸入輸出流
3)對(duì)象使用完成后進(jìn)行置空
對(duì)象使用完畢,應(yīng)手動(dòng)置成null抄瑟。
10.ArrayList凡泣、Vector、LinkedList的使用
1)ArrayList實(shí)現(xiàn)隨機(jī)查找和遍歷
2)Vector實(shí)現(xiàn)數(shù)組同步操作
3)LinkedList數(shù)據(jù)的動(dòng)態(tài)插入和刪除
11.synchronized的使用
1)方法的同步
一旦有一個(gè)線程在訪問(wèn)該方法皮假,方法將陷入等待或阻塞鞋拟,只有用戶線程方法解鎖后才能被其他線程調(diào)用。
2)代碼塊同步
此同步是為了保證一個(gè)線程中特殊的對(duì)象操作而存在的惹资,比如多個(gè)用戶有權(quán)限操作同一公共資源的時(shí)候就需要使用該方式實(shí)現(xiàn)資源的同步操作严卖。
12.三元表達(dá)式代替if else
publicString express(booleanflag)
{
? ? ? ?returnflag??"成功":"失敗";
}
13.StringTokenizer代替substring()和indexOf()
StringTokenizer是java中object類的一個(gè)子類,繼承自 Enumeration( public interface Enumeration實(shí)現(xiàn) Enumeration(列舉) 接口的對(duì)象布轿,它生成一系列元素哮笆,一次生成一個(gè)来颤。)接口。
StringTokenizer 可以理解為String的字符標(biāo)記對(duì)象稠肘,此對(duì)象可以實(shí)現(xiàn)字符串的截取操作福铅,避免了字符串容易導(dǎo)致StringIndexOutOfBoundsException的問(wèn)題。其構(gòu)造器有下面三種形式:
·public StringTokenizer(String str,String delim,boolean returnTokens);
·public StringTokenizer(String str,String delim);
·public StringTokenizer(String str); 其中项阴,str為需分析的字符串滑黔,delim為定界符,Tokens描述是否將定界符作為一個(gè)token(令牌)环揽。
結(jié)果打印的都是:boonya
14.System.arraycopy()實(shí)現(xiàn)數(shù)組值的拷貝
15.instanceof判斷接口而不是接口的實(shí)現(xiàn)類
16.將類中不變的實(shí)例靜態(tài)化
如果類中的變量不會(huì)隨他的實(shí)例而變化略荡,就可以定義為靜態(tài)變量,從而使他所有的實(shí)例都共享這個(gè)變量歉胶。
public class AlarmDao extends BaseDao
{
? ?private static SortUtil?sortUtil ?= new SortUtil();
}
17.僅查找單個(gè)字符用charAt()代替startsWith()
18.使用單元測(cè)試代替main方法
19.在數(shù)據(jù)庫(kù)應(yīng)用程序中使用批處理
20.線程使用技巧
1)使用大量線程(Threading)的場(chǎng)合使用線程池管理
2)防止過(guò)多的同步
3)同步方法而不要同步整個(gè)代碼段
4)在追求速度的場(chǎng)合汛兜,用ArrayList和HashMap代替Vector和Hashtable
5)使用notify()而不是notifyAll()
6)不要在循環(huán)中調(diào)用 synchronized(同步)方法
7)單線程應(yīng)盡量使用 HashMap, ArrayList
21.I/O技巧
1)使州緩沖提高I/O性能
2)lnputStream比Reader高效,OutputStream比Writer高效
3)在適當(dāng)?shù)臅r(shí)候用byte替代char
4)在finally 塊中關(guān)閉stream
參考文獻(xiàn):
boonya博客:http://blog.csdn.net/boonya/article/details/13622169