2. 儘可能減小對變量的重複計算
數據庫
3. 儘可能採用懶加載的策略
數組
4. 儘可能重用對象安全
5. 及時關閉流
併發
6. 慎用異常 * 異常對性能不利,拋出異常先要建立一個新的對象,throwable接口的構造函數調用名爲fillInStackTrace()本地同步方法 * 此方法檢查堆棧,收集調用跟蹤信息,只要有異常就拋出.(異常只能用於錯誤處理,不可用來控制程序流程)
函數
7. 不要在循環中使用 try...catch...
性能
8. 容器初始化 儘量指定長度 如:new ArrayList<>(128); new HashMap<>(256);等避免自動擴容帶來性能消耗
ui
9. 當複製大量數據時, 使用System.arraycopy()命令
線程
10. 基於效率和類型檢查的考慮,應該可能使用array ,沒法肯定數組大小時再使用ArrayList
對象
11. 儘可能使用HashMap、ArrayList、StringBuilder,除非線程安全須要,不然不推薦使用 * Hashtable、Vector、StringBuffer,後三者因爲使用同步機制而致使了性能開銷
接口
12. 不要將數組聲明爲public static final * 將數組聲明爲public更是一個安全漏洞,這意味着這個數組能夠被外部類所改變
13. 儘可能在適合的場景使用單例 * 使用單例可減輕加載的負擔,縮短加載的時間,提升加載的效率,但並非全部場合都適用單例 可以使用單例的場景以下:
1> 控制資源的使用,經過線程同步來控制資源的併發訪問
2> 控制實例的產生,以達到節約資源爲目的
3> 控制數據的共享,在不創建直接關聯的條件下,讓多個不相關的進程或線程之間實現通訊
14. 儘可能避免隨意使用靜態變量 當某個對象定義爲static的變量所引用,那麼gc一般不會回收這個對象所佔有的堆內存
15. ArrayList 隨機遍歷快,linkedList 添加/刪除快
ArrayList 基於數組 有下標,遍歷較快,
linkedList 基於鏈表 添加/刪除只需改變指向就好
順序插入和隨機訪問比較多的場景使用ArrayList,元素刪除和中間插入比較多的場景使用LinkedList
16. 儘可能使用同步代碼塊代替同步方法
17. 不可建立一些不使用的對象,不要導入一些不使用的類
18. 程序運行過程當中避免使用反射,(反射功能強大但效率不高)
19. 使用數據庫鏈接池 和線程池 這兩個池都是用於重用對象的,前者可避免頻繁打開和關閉鏈接,後者可避免頻繁建立和銷燬線程
20. 儘可能使用帶緩衝的輸入輸出流進行IO操做 * 帶緩衝的輸出流: 即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream這可極大地提高IO效率 21. 把一個基本數據類型轉爲字符串,基本數據類型.toString()最快 String.valueOf(數據)次之, 數據 + ""最慢
22. 遍歷Map 最有效率的方法
Map<String,String> map = new HashMap<>();
for (Map.Entry<String,String> entry : map.entrySet())
{
String key = entry.getKey();
String value = entry.getValue();
}
或者
Map<String,String> map = new HahsMap<>();
Set<Map.Entry<>String,String> entry = map.entrySet(); Iterator<Map.Entry<String,String>> iter = entry.iterator();
while(iter.hasNext())
{
Map.Entry<String,String> entry = iter.next();
}
23. 對資源的close()建議分開操做