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