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