java 怎么从性能上优化代码_月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化技巧...
盡量指定類、方法的final修飾符
Java編譯器會尋找機會內聯所有的final方法,內聯對于提升Java運行效率作用重大,具體參見Java運行期優化。此舉大概能夠使性能平均提高50%。
盡量重用對象特別是String對象的使用,出現字符串連接時應該使用StringBuilder/StringBuffer代替。
盡可能使用局部變量
及時關閉流:進行數據庫連接、I/O流操作,在使用完畢后,及時關閉以釋放資源。
盡量減少對變量的重復計算:明確一個概念,對方法的調用,即使方法中只有一句語句,也是有消耗的,包括創建棧幀、調用方法時保護現場、調用方法完畢時恢復現場等。
盡量采用懶加載的策略,即在需要的時候才創建
慎用異常
異常對性能不利。拋出異常首先要創建一個新的對象,Throwable接口的構造函數調用名為fillInStackTrace()的本地同步方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤信息。只要有異常被拋出,Java虛擬機就必須調整調用堆棧,因為在處理過程中創建了一個新的對象。異常只能用于錯誤處理,不應該用來控制程序流程。
不要在循環中使用try…catch…,應該把其放在最外層
如果能估計到待添加的內容長度,為底層以數組方式實現的集合、工具類指定初始長度
當復制大量數據時,使用System.arraycopy()命令
乘法和除法使用移位操作:移位操作雖然快,但是可能會使代碼不太好理解,因此最好加上相應的注釋。
循環內不要不斷創建對象引用
基于效率和類型檢查的考慮,應該盡可能使用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代码性能优化技巧...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS UITouch 触摸事件,UIR
- 下一篇: 计算机内存比外存容量大吗,内存容量一般比