JAVA開發常用的性能優化有哪些?
沒有系統地整理過,就說一些常見的吧,想到什么說什么,有一些關于代碼細節,有些可能是一些方法和習慣。
避免過多地創建Java對象:比如在循環中創建對象,創建和回收都需要花費時間;
盡量使用局部變量,或者換一句換說,要根據變量的作用域,把變量定義在合適的地方;
盡量減少計算/操作:這里其實要注意的點很多,一個簡單的例子,入參給了10個ID去查詢數據庫,是循環10遍執行where id=?,還是執行1遍where id in(list);
使用StringBuffer、Collection的時候,如果能夠確認長度/元素數量的話,盡量指定長度/元素數量;因為默認值是比較小的,當它們在做擴展的時候,會有一定性能損耗;
基本數據類型轉為字符串,用toString()而不是+"";
在finally塊中關閉Stream,要養成好習慣;
盡量少使用正則表達式;非要用的話,盡量把Pattern緩存下來;
如果要多線程處理,請使用線程池;
如果不是必須,用HashMap、ArrayList,而不是HashTable、Vector;根據需要選擇使用ArrayList還是LinkedList,反正我一般都是用ArrayList;
在必要的時候捕捉異常,并且不要通過異常控制代碼邏輯和業務流程;
一些在數據庫中的配置參數(不會經常變化),可以在項目啟動的時候或第一次使用的時候,從數據庫中查詢出來,放到內存或緩存中;不要每次用的時候都去數據庫里面查一遍;
接上條,盡量使用懶加載,也就是項目啟動的時候創建or第一次使用的時候創建,選擇后者;
有些開發人員喜歡用HashMap放一些緩存數據,不如直接使用開源的緩存框架,他們會做的更好;
能在客戶端做的話,就不要在服務端做;能在服務端程序里面做的話,就不要在數據庫里面做;比如要做where time > sysdate-1,那么就在程序中把sysdate-1算出來,再交給SQL。
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。