1.如果沒有線程同步,最好習(xí)慣用StringWriter而不是StringBuffer,因為,StringBuffer是線程安全的,所以,效率會稍微低一點.
當(dāng)然JDK5以后,還提供了StringBulder,這個類要比StringWriter更好用一些,當(dāng)然也不是線程安全的.
如果要用StringBuffer,請盡量使用append,不要用+,在用StringBuffer時盡量先分配空間如:StringBuffer s = new StringBuffer(45);
2.數(shù)據(jù)庫查詢的結(jié)果集處理,我們對數(shù)據(jù)庫操作時,可能會針對里面的數(shù)據(jù)做處理性質(zhì)的遷移.一般都是先Select一把,然后把結(jié)果集的內(nèi)容處理,
最后Insert或Update回數(shù)據(jù)庫.這個是效率最低下的.無論是否使用Hibernate都很低下.當(dāng)然,最好是寫一個存儲過程來完成這件事,
我們只是調(diào)用一下,觸發(fā)這個事件就可以了.如果非要自己寫程序完成,
那么,一定要注意,你在Select的時候,不要將所有數(shù)據(jù)一次性全都查詢出來,
要按行數(shù)分次處理否則很容易將內(nèi)存暴掉.因為,這些數(shù)據(jù)即使你已經(jīng)處理完了,
但是,對象有可能被Map或者Collection的某個對象所引用,這樣JVM就無法進(jìn)行回收.
3.程序慢,要找到瓶頸在哪里,這樣才能解決.一般是三大部分,一個CPU占用率過高;一個是硬盤訪問過于頻繁;一個是網(wǎng)絡(luò)擁塞.
a.CPU占用又可以分三個部分,一個是tomcat占用過高;一個是數(shù)據(jù)庫占用過高;另一個是其他程序(如遠(yuǎn)程控制程序)占用過高...tomcat過高,
最有可能是處理數(shù)據(jù)算法效率太低.數(shù)據(jù)庫占用過高,最有可能的是頻繁對一個已經(jīng)很長的表進(jìn)行了操作(可以通過建臨時表來進(jìn)行緩解,效果不錯).
其他程序想辦法不使用這些程序或再找個空閑的服務(wù)器來run這些程序.
b.一般硬盤訪問頻繁,CPU是不會過高的.比如有一個循環(huán)程序,因數(shù)據(jù)不合要求總是打印日志,而日志就寫在文件里,
這樣,由于寫日志文件而使得處理線程進(jìn)展緩慢.可以通過對數(shù)據(jù)進(jìn)行預(yù)處理,來緩解硬盤訪問頻繁的狀況,或者根據(jù)特點采用緩沖區(qū),多線程寫文件等技術(shù)來解決這樣的問題.
c.網(wǎng)絡(luò)擁塞,看看是否有網(wǎng)絡(luò)攻擊(DOS或者ARP之類的),或者增加帶寬.如果是由于聯(lián)通和電信的互訪造成慢的,那么可以考慮使用鐵通之類的節(jié)點進(jìn)行中轉(zhuǎn),效果還算可以.