原文地址:http://user.qzone.qq.com/1159340782/2java
略微犧牲一些性能,換來更好的可讀性和可維護性是好的選擇。如下不提倡和提倡的寫法僅供參考。正則表達式
不提倡的寫法api |
緣由數組 |
|
1緩存 |
儘可能避免隨意使用靜態變量工具 |
靜態變量和類同步,類不卸載,對象將常駐內存,直到程序終止性能 |
2ui |
儘可能避免過多過常的建立java對象 |
花費時間去建立對象,回收對象也是一種開銷,儘可能複用對象,用基本數據類型或數組代替對象。 |
3 |
儘可能避免使用finalize方法 |
致使GC負擔更大,程序效率更差 |
4 |
儘可能避免變量的重複計算 |
如遍歷數組的長度,一次計算便可 |
5 |
儘可能避免沒必要要的建立 |
程序邏輯控制對象的建立 |
6 |
儘可能避免使用二維數組 |
二維數組佔用空間比一維數組多得多,大概10倍 |
7 |
儘可能避免使用split |
Split因爲支持正則表達式,效率低,消耗大量資源,建議使用apache下的StringUtils.split頻繁split緩存結果 |
8 |
儘可能避免很是大的內存分配 |
內存連續,浪費資源 |
9 |
慎用異常 |
建立異常開銷大,好在try-catch開銷不大 |
10 |
儘可能減小IO操做 |
IO消耗系統資源,儘可能使用緩存 |
11 |
儘可能避免不須要的instanceof操做 |
always true |
12 |
儘可能避免不須要的造型操做 |
|
13 |
對於boolean避免沒必要要的等式 |
Flag == true |
代碼中提倡的寫法
序號 |
提倡的寫法 |
緣由 |
1 |
儘可能在合適的場合使用單例 |
減輕加載的負擔,縮短加載的時間,提升加載的效率 |
2 |
儘可能使用final修飾符 |
尋找內聯全部final方法,性能提升50% |
3 |
儘可能使用局部變量 |
實例變量和靜態變量等都在堆中創建,速度慢,局部變量放在棧中,速度快 |
4 |
處理好包裝類型和基本類型使用場景 |
包裝類型屬於對象在堆中建立,基本類型在棧中建立,有對象方面須要處理適用包裝類型,其餘提倡基本類型 |
5 |
慎用synchronized儘可能減少synchronized方法 |
實現同步系統開銷大,容易死鎖。儘可能適用方法同步代替代碼塊同步 |
6 |
儘可能使用StringBuffer和StringBuilder進行字符串的拼接 |
儘可能初始化StringBuffer和StringBuilder的長度,字符數組動態添加字符串 |
7 |
儘可能用基本數據類型代替對象 |
如String str = 「hello」 String str = new String(「hello」); 後者還建立了一個字符數組 |
8 |
單線程儘可能使用HashMap ArrayList |
HashTable Vector等使用了同步機制,下降了性能 |
9 |
儘可能合理的使用HashMap |
多使用HashMap的構造方法,初始化它的大小,擴容是一件很耗費性能的事情 |
10 |
儘可能在finally塊中釋放資源 |
避免資源泄漏 |
11 |
儘可能使用位運算取代a/b,a*b操做 |
/是一個代價很高的操做 |
12 |
儘可能早釋放無用的對象 |
Obj =null |
13 |
合理使用arrayList和linkedList |
一個是線性表(查詢),一個是鏈表(添加和刪除), |
14 |
儘可能使用System.arraycope複製數組 |
比循環複製數組要快得多 |
15 |
儘可能緩存常常使用的對象 |
HashMap,WeekHashMap或者第三方的工具EhCache OsCache Memcached |
16 |
大對象儘可能用clone()不用new |
new建立對象成本大 |
17 |
儘量地使用java自身提供的api |
不解釋 |
18 |
使用快速度的jdbc驅動 |
數據庫鏈接池 |
19 |
緩存DataSorce |
爲了再次的JNDI調用,能夠系統中緩存要使用的DataSorce |
20 |
讓訪問實例內變量的setget方法變成final |
可變成inlined |
21 |
charat代替startswith |
-- |
22 |
若是隻有一個字符的’’代替」」 |
-- |
23 |
常量字符串,用String代替StringBuffer |
減少運行開銷提升性能 |
24 |
Stringtokenizer分析字符串更容易,效率也會高一些 |
|
25 |
使用三目運算代替if-return else |
-- |