月薪上萬作好這一步:程序員職場中必須掌握的的Java代碼性能優化技巧

代碼優化,程序員必須懂得一門學問,簡潔漂亮的代碼給人的感受就像如沐清風,一堆垃圾的代碼給人的感受就像吃了翔同樣的難受。。因此不論是程序員仍是準程序員,養成良好的代碼優化習慣都是必需要養成的java

月薪上萬作好這一步:程序員職場中必須掌握的的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方法即對外提供的方法,若是給這些方法太多形參的話主要有兩點壞處:
一、違反了面向對象的編程思想,Java講求一切都是對象,太多的形參,和麪向對象的編程思想並不契合
二、參數太多勢必致使方法調用的出錯機率增長
字符串變量和字符串常量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代碼性能優化技巧性能優化

相關文章
相關標籤/搜索