Java代碼優化實踐

1.   儘可能指定類的final修飾符數據庫

帶有final修飾符的類是不可派生的。指定一個類爲final,則該類全部方法都是final。Java編譯器會會找機會內聯全部否final方法,這樣可以使性能平均提升50%.數組

2.儘可能重用對象。緩存

特別是String對象的使用中,出現字符串連接狀況時應用StringBuffer代替。jvm

3.儘可能使用局部變量。函數

調用方法時傳遞的參數以及在調用中建立的臨時變量都保存在棧中,速度較快。其餘變量買入靜態變量、實例變量等,都在堆中建立,速度較慢。另外,依賴於具體的編譯器/jvm,局部便利還可能獲得進一步的優化。性能

4.不要重複初始化變量。優化

5.在進行數據庫鏈接,I/O流操做是,記住務必在使用完後關閉鏈接,釋放資源。spa

由於這些大對象的操做會形成系統大的開銷。線程

6.在使用同步機制時,應儘可能使用方法同步代替代碼塊同步。日誌

7.慎用異常,

異常對性能不利。拋出異常首先要建立一個新的對象。Throwable接口的構造函數調用名爲fillInStackTrace的本地方法,fillInStackTrace()方法檢查堆棧,手機調用跟蹤信息。只要有異常被拋出,VM就必須調用對堆棧,由於在處理過程當中建立了一個新的對象。異常只能用於錯誤處理,不該該用來控制程序流程。

8.儘可能不要在循環中使用try{}catch{}

能夠在循環外部使用try,,catch包裹。

9.在StringBuffer時,應初始化StringBuffer的容量。這樣能夠明顯提高性能。

10.當複製大齡數據時,使用System.arraycopy()

11.不用new關鍵詞建立類的實例。

用new關鍵字建立類 的實例時,構造函數鏈中的全部構造函數都會別自動調用。按若是一個對象實現了Cloneable接口,咱們就能夠用它的clone方法,clone方法不會調用任何類的構造函數。

12.在進行乘法和除法,使用位移操做符會大大提高性能。

13.儘可能使用HashMap和ArrayList,除非必要,不然不推薦使用HashTable和Vetor,後者因爲使用同步機制,進而致使了性能的開銷。

14.在遍歷Map時,儘可能使用entry遍歷map,不要使用keyset()方式

15.儘可能使用基本數據類型而不是包裝類型。

16.急事消除過時對象的引用,放置內存泄露。

17.儘可能少使用反射,若是使用反射,第一次使用反射,而後加入緩存。

18.儘可能使用鏈接池,線程池,對象池、緩存等。

19.使用日誌過程當中參數拼接使用佔位符

log.info("o:"+o)//不推薦

log.info("o:{}",o)//推薦

20.循環內不要不斷建立對象引用

21.不要對數組使用toString()方法

22.不要對超出範圍的基本數據類型作向下強制轉型

23.把一個基本數據類型轉微字符串,基本數據類型.toString()最快,valueOf次之,數據+""最慢

24.字符串變量和字符串常量equals的時候江字符串常量寫在前面

25.不喲啊江數組聲明微public static final

26.初始化集合,儘可能制定大小

集合每次擴容的瑞安複雜度頗有可能時O(n),因此儘可能制定已知的集合大小,能減小集合的擴容次數

27.頻繁使用Collection.contains方法,使用Set代替

28.公有靜態變量應該經過類方位。

29.禁止使用構造方法BigDecimal(double),這樣會存在精度損失風險,應該使用BigDecimal.valueOf(double)

30.枚舉的屬性字段必須時私有不可變

相關文章
相關標籤/搜索