月薪上萬做好這一步:程式設計師職場中必須掌握的的Java程式碼效能優化技巧

MMMjava學習群478052716發表於2017-11-15

程式碼優化,程式設計師必須懂得一門學問,簡潔漂亮的程式碼給人的感覺就像如沐清風,一堆垃圾的程式碼給人的感覺就像吃了翔一樣的難受。。所以不管是程式設計師還是準程式設計師,養成良好的程式碼優化習慣都是必須要養成的

月薪上萬做好這一步:程式設計師職場中必須掌握的的Java程式碼效能優化技巧

首先。我們要搞清楚優化程式碼的目的

減小程式碼的體積
提高程式碼執行的效率
月薪上萬做好這一步:程式設計師職場中必須掌握的的Java程式碼效能優化技巧

程式碼優化具體細節(只說Java的,小編就是Java程式設計師)

儘量指定類、方法的final修飾符
Java編譯器會尋找機會內聯所有的final方法,內聯對於提升Java執行效率作用重大,具體參見Java執行期優化。此舉大概能夠使效能平均提高50%。
儘量重用物件特別是String物件的使用,出現字串連線時應該使用StringBuilder/StringBuffer代替。
儘可能使用區域性變數
及時關閉流:進行資料庫連線、I/O流操作,在使用完畢後,及時關閉以釋放資源。
儘量減少對變數的重複計算:明確一個概念,對方法的呼叫,即使方法中只有一句語句,也是有消耗的,包括建立棧幀、呼叫方法時保護現場、呼叫方法完畢時恢復現場等。
儘量採用懶載入的策略,即在需要的時候才建立
慎用異常
異常對效能不利。丟擲異常首先要建立一個新的物件,Throwable介面的建構函式呼叫名為fillInStackTrace()的本地同步方法,fillInStackTrace()方法檢查堆疊,收集呼叫跟蹤資訊。只要有異常被丟擲,Java虛擬機器就必須調整呼叫堆疊,因為在處理過程中建立了一個新的物件。異常只能用於錯誤處理,不應該用來控制程式流程。
不要在迴圈中使用try…catch…,應該把其放在最外層
如果能估計到待新增的內容長度,為底層以陣列方式實現的集合、工具類指定初始長度
當複製大量資料時,使用System.arraycopy()命令
乘法和除法使用移位操作:移位操作雖然快,但是可能會使程式碼不太好理解,因此最好加上相應的註釋。
迴圈內不要不斷建立物件引用(Java學習群632119504)
基於效率和型別檢查的考慮,應該儘可能使用array,無法確定陣列大小時才使用ArrayList
儘量使用HashMap、ArrayList、StringBuilder,除非執行緒安全需要,否則不推薦使用Hashtable、Vector、StringBuffer,後三者由於使用同步機制而導致了效能開銷
不要將陣列宣告為public static final
儘量在合適的場合使用單例
使用單例可以減輕載入的負擔、縮短載入的時間、提高載入的效率,但並不是所有地方都適用於單例,簡單來說,單例主要適用於以下三個方面:
(1)控制資源的使用,通過執行緒同步來控制資源的併發訪問
(2)控制例項的產生,以達到節約資源的目的
(3)控制資料的共享,在不建立直接關聯的條件下,讓多個不相關的程式或執行緒之間實現通訊
儘量避免隨意使用靜態變數
要知道,當某個物件被定義為static的變數所引用,那麼gc通常是不會回收這個物件所佔有的堆記憶體的
及時清除不再需要的會話
實現RandomAccess介面的集合比如ArrayList,應當使用最普通的for迴圈而不是foreach迴圈來遍歷
使用同步程式碼塊替代同步方法
將常量宣告為static final,並以大寫命名
這樣在編譯期間就可以把這些內容放入常量池中,避免執行期間計算生成常量的值。另外,將常量的名字以大寫命名也可以方便區分出常量與變數
不要建立一些不使用的物件,不要匯入一些不使用的類
程式執行過程中避免使用反射
反射是Java提供給使用者一個很強大的功能,功能強大往往意味著效率不高。不建議在程式執行過程中使用尤其是頻繁使用反射機制
使用資料庫連線池和執行緒池
使用帶緩衝的輸入輸出流進行IO操作,這可以極大地提升IO效率
順序插入和隨機訪問比較多的場景使用ArrayList,元素刪除和中間插入比較多的場景使用LinkedList
不要讓public方法中有太多的形參
public方法即對外提供的方法,如果給這些方法太多形參的話主要有兩點壞處:
1、違反了物件導向的程式設計思想,Java講求一切都是物件,太多的形參,和麵向物件的程式設計思想並不契合
2、引數太多勢必導致方法呼叫的出錯概率增加
字串變數和字串常量equals的時候將字串常量寫在前面,可以避免空指標異常
請知道,在java中if (i == 1)和if (1 == i)是沒有區別的,但從閱讀習慣上講,建議使用前者
不要對陣列使用toString()方法
不要對超出範圍的基本資料型別做向下強制轉型
公用的集合類中不使用的資料一定要及時remove掉
把一個基本資料型別轉為字串,基本資料型別.toString()是最快的方式、String.valueOf(資料)次之、資料+””最慢
使用最有效率的方式去遍歷Map
對資源的close()建議分開操作
月薪上萬做好這一步:程式設計師職場中必須掌握的的Java程式碼效能優化技巧

最後再給各位或是程式設計師或是準程式設計師們的一點建議了吧:如果你在學習Java的過程中或者在工作中遇到什麼問題都可以來群裡提問,阿里Java高階大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!可以加群找我要課堂連結 注意:是免費的 沒有開發經驗誤入哦! 非喜勿入!
其實應該還有其他的Java程式碼優化小技巧,但是我可能還沒有了解到,也沒有總結的很好。
具體例子,我就不一一的貼上程式碼了,如果大家對這些方面感興趣的話可以自行百度詳細解決一下
如果有什麼百度不出來的東西,可以來我的Java學習群632119504.可以隨時來找我諮詢,或者解決問題
學習就像逆水行舟,學習Java更是這樣,畢竟Java已經雄踞程式語言排行第一已經十幾年了,但正是這十幾年,也使得Java各方面的體系也比其他語言更加完整和先進,有什麼不懂的問題很容易就能到到解決
別讓別人看見你的程式碼第一時間想到的是刪了從寫而不是程式碼優化,一位大佬親口跟我說的
月薪上萬做好這一步:程式設計師職場中必須掌握的的Java程式碼效能優化技巧

相關文章