代碼優化建議(持續更新...)

此文記錄在工作學習中遇到的代碼優化的方法和建議.不是全部,但是會持續更新.

 

1.儘可能使用局部變量

         調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧中,速度較快,其他變量:如靜態變量  實例變量等都在堆中創建,速度較慢.另外,棧中創建的變量,隨着方法運行結束這些內容都沒有了,不需要額外的垃圾回收.

 

2. 儘量減少對變量的重複計算

         對方法的調用,即使方法中只有一句語句,也是有消耗的,所以比如下面的for循環:

         

for(int i = 0; i < list.size(); i++){
    ...
    ...
}

執行每次循環的時候都會調用list.size方法去和變量i進行比對,在list.size()很大的時候,消耗會很大

所以建議替換爲

int length = list.size();
for(int i = 0;i < length;i++){
    ...
    ...
}

這樣就會減少很多消耗

 

 

3.採用懶加載的策略,使用的時候才創建

String str = "aaa";
if (i == 1){
    list.add(str);
}

//建議替換爲

if(i == 1){
    String str = "aaa";
    list.add(str);
}

4.異常不應該用來控制程序流程

       異常對性能不利.拋出異常首先要創建一個新的對象,Throwable接口的構造函數調用名爲filllnStackTrace()的本地同步方法,filllnStacktrace()方法檢查堆棧,手機調用跟蹤信息,只要有異常被拋出,java虛擬機就必須調整調用堆棧,因爲在處理過程中創建了一個新的對象,異常只能用於錯誤處理,不應該用來控制程序流程.

 

 

5.不要將數組聲明爲public static final

      因爲這毫無意義,這樣只是定義了引用爲static final ,數組的內容還是可以隨意改變的,將數組聲明爲一個public更是一個安全漏洞,這意味着這個數組可以被外部類所改變

 

6.不要創建一些不使用的對象,不要導入一些不使用的類

      這個不需要多解釋,不使用幹嘛要創建和導入,閒的了麼?

 

7.程序運行過程中儘量避免使用反射

      反射是java提供給用戶一個很強大的功能,功能強大往往意味着效率不高.不建議在程序運行過程中使用尤其是頻繁使用反射機制,特別是Method的invoke方法.如果確實有必要,一種建議性的做法是將那些需要通過放射加載的類在項目啓動的時候通過反射實例化一個對象並放入內存.

 

8.使用數據庫連接池和線程池

     這兩個池都是用於重用對象的,前者可以避免頻繁的打開和關閉連接,後者可以避免頻繁的創建和銷燬線程

 

9.容器初始化時儘可能指定長度

     容器初始化時儘可能指定長度,如:new ArrayList<String>(10);new HashMap<>(12);避免容器長度不足時,擴容帶來的性能損耗

 

10.ArrayList隨機遍歷快,LinkedList添加刪除快,根據業務需求選擇合適的集合,不要ArrayList用到死

 

11.使用Entry遍歷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 HashMap<>();
for (String key : map.keySet()) {
    String value = map.get(key);
}

12,不要手動調用System.gc();

 

13.String儘量少用正則表達式

   正則表達式雖然功能強大,但是其效率較低,除非是有需要,否則儘可能少用.

replace()不支持正則

replaceAll()支持正則

如果只是字符的替換建議使用replace();

 

14.日誌的輸出要注意級別

// 當前的日誌級別是error
LOGGER.info("保存出錯!" + user);

上面的例子就是錯誤的示範,error就是error,不要用info來代替

 

15.對資源的close()建議分開操作

try{
    xxx.close;
    yyy.close;
}catch(Exception e){
    ...
}
//建議改爲
try{
    xxx.close;
}catch(Exception e){
    ...
}
try{
    yyy.close;
}catch(Exception e){
    ...
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章