StringBuilder.append()與String的"+"的效率PK


如果String通過"+"來拼接,如果拼接的字符串是常量,則效率會非常高,因為會進行編譯時優化,這個時候StringBuilder的append()是達不到的。

如果將String的"+"放在循環中,會創建很多的StringBuilder對象,並且執行之后會調用toString()生成新的String對象,這些對象會占用大量的內存空間
而導致頻繁的GC,從而效率變慢。

StringBuilder.append()中間過程中產生的垃圾內存大多數都是小塊的內存,鎖產生的垃圾就是拼接的對象以及擴容原來的空間(當發生String的"+"操作時,
前一次String的"+"操作的結果就成了內存垃圾,垃圾會越來越多,最后擴容也會產生很多垃圾)

注意的是,並不是String的"+"操作本身慢,而是因為大循環中大量的內存使用,開銷比較大,會導致頻繁的GC,並且很多時候程序慢是因為頻繁GC導致的
而且更多的是FULL GC,效率才會下降。

如果是少量的小字符串疊加,那么采用append()提升效率並不明顯,但是遇到大量的字符串疊加或者大字符串疊加的時候,使用append的效率會高很多。

最后有一個優化常識:
在JVM中,提倡的重點是讓這個"線程內所使用的內存"盡快結束,以便讓JVM認為它是垃圾,在Young空間就盡量釋放掉,盡量不要讓其進入Old區域,一個
重要的因素是代碼是否跑得夠快,其次是分配的空間要足夠小。

當然優化也要看場景,世事無絕對。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM