每一種語言都有其自身的特點(diǎn),只有掌握了其自身的特點(diǎn),才能用它編寫出高效的程序。下面就我個(gè)人實(shí)踐所知談?wù)刯avaSE方面的性能問題,
javaEE方面的性能暫不討論,要是時(shí)間可以再寫一javaEE方面的性能問題的帖子。

1, 盡量不要使用+號(hào)來連接字符串,至少不要在隔行中使用+來連接字符串。因?yàn)橛械膉ava虛擬機(jī)可能對(duì)字符串連接+做了性能優(yōu)化,在都同行的+字符串連接,轉(zhuǎn)化為StringBuffer的append()方法來連接,所以在同行使用+和使用StringBuffer的append 來做連接性能上差不多。
2, 對(duì)小數(shù)據(jù)int的Integer封裝,盡量的使用Integer.valueOf()創(chuàng)建,而不要使用new來創(chuàng)建。因?yàn)镮nteger類緩存了從-128到256個(gè) 狀態(tài)的Integer。
3, 對(duì)Boolean類,要用valueOf()或使用Boolean.TRUE或Boolean.FALSE來創(chuàng)建對(duì)象。我個(gè)人覺得對(duì)Boolean類用private構(gòu)造函數(shù),可能就會(huì)避免不好的使用Boolean類了。
4, 在設(shè)計(jì)類時(shí)應(yīng)盡可能地避免在類的默認(rèn)構(gòu)造函數(shù)中創(chuàng)建,初始化大量的對(duì)象。
5, 合理的申請(qǐng)數(shù)組空間,如果數(shù)組中所保存的元素占用內(nèi)存空間較大或數(shù)組本身長(zhǎng)度較長(zhǎng)的情況,我們釆用可以釆用軟引用的技術(shù)來引用數(shù)組,以“提醒”JVM及時(shí)的回收垃圾內(nèi)存,維護(hù)系統(tǒng)的穩(wěn)定性。
6,  避免創(chuàng)建重復(fù)的對(duì)象,我們?cè)诰帉懸粋€(gè)方法的時(shí)候應(yīng)該先考慮方法里的局部對(duì)象域能否改為private static final,從而避免創(chuàng)建重復(fù)的對(duì)象。
7, 把try/catch塊放入循環(huán)體內(nèi),會(huì)極大的影響性能,如果編譯JIT被關(guān)閉或者你所使用的一個(gè)不帶JIT的JVM,性能會(huì)將下降21%之多!
8,StringBuffer的構(gòu)造器會(huì)創(chuàng)建一個(gè)默認(rèn)大小(通常是16)的字符數(shù)組。在使用中,如果超出這個(gè)大小,就會(huì)重新分配內(nèi)存,創(chuàng)建一個(gè)更大的數(shù)組,并將原先的數(shù)組復(fù)制過來,再丟棄舊的數(shù)組。在大多數(shù)情況下,你可以在創(chuàng)建StringBuffer的時(shí)候指定大小,這樣就避免了在容量不夠的時(shí)候自動(dòng)增長(zhǎng),以提高性能。
9,   使用Java NIO提高服務(wù)端程序的性能。
10,考慮用靜態(tài)工廠方法替代構(gòu)造函數(shù)。
11,在對(duì)大量的數(shù)組拷貝時(shí),可以考慮用Arrays.copyOf()來拷貝。
12, 在并發(fā)的情況下,要合理的選擇同步的策略,應(yīng)該謹(jǐn)慎的控制synchronized塊的大小,不可以將一個(gè)操作分解到多個(gè)synchronized 但也要盡量地從synchronized塊中分離耗時(shí)的且不影響并發(fā)的操作。
13,要合理的選擇集合框架,例如:ArrayList和LinkedList在某些不同的場(chǎng)合,其性能相差很大。對(duì)要做大量的插入時(shí), LinkedList 的性能比ArrayList的性能好。對(duì)要做大量隨機(jī)查找的時(shí)候用ArrayList的性能比用LinkedList的性能好。還有在不需要并發(fā)操作的情況下,選擇非線程安全的集合比線程安全的集合要好。如在非線程安全的要求下,選擇ArrayList要比Vector好。
14,不要在循環(huán)語句塊中調(diào)用length()方法做為循環(huán)結(jié)束的條件。
15,如果字符串特別長(zhǎng),不要釆用charAt()一一的獲取特定位置的字符,而應(yīng)該調(diào)用toCharArray()方法轉(zhuǎn)化為字符數(shù)組,然后通過數(shù)組 索引值獲取指定位置的字符。
16,如果是想把數(shù)據(jù)封裝成Double類型的,不要這樣使用new Double("1.23"),而要應(yīng)這樣使用new Double(1.23),雖然二者都沒有語法 的錯(cuò)誤,也都能達(dá)到預(yù)期的結(jié)果,但其性能有著很大的差異。
17, 應(yīng)盡量的通過緩沖流類來提高I/O操作效率,但也要合理的選擇緩沖大小 。
    呵呵,好了,今天就寫到這吧,以后要是有時(shí)間再繼續(xù)寫。小弟我初學(xué)java,不對(duì)之地,歡迎大家指正,補(bǔ)遺。