所有,的StringBuffer/StringBuilder的大小在Java
爲什麼建議StringBuffer
/StringBuilder
對象的大小應被初始化爲一尺寸的2^{1 ... N}(雖然通常這將是> 64)。這樣做會帶來哪些優勢/優化?
所有,的StringBuffer/StringBuilder的大小在Java
爲什麼建議StringBuffer
/StringBuilder
對象的大小應被初始化爲一尺寸的2^{1 ... N}(雖然通常這將是> 64)。這樣做會帶來哪些優勢/優化?
這樣做會帶來哪些優勢/優化?
我認爲這樣做沒有任何優勢。
我的建議是選擇比預期尺寸略大一點的初始尺寸...如果您的估算適中。如果你沒有估算的話,通過提供一個初始尺寸你將不會獲得太多收益。
使用顯着高估的初始大小不是一個好主意。它浪費了空間,而且JVM將不得不將所有那些在某些耗費CPU /內存週期的地方使用的字符清零。
[應該可以憑經驗確定低估和高估尺寸的成本,並與使用默認初始尺寸的成本進行比較。然而,這些數字可能取決於JIT優化器的性能如何,以及諸如內存複製速度有多快與可以將其復位速度有多快等。換句話說,它們將是特定於平臺的。]
的建議是因爲,默認構造函數將與大小16的初始化,並且只要超過它會雙這種能力創建一個新的。
因此,如果您確定知道您將使用多於16個空格,則應該使用更高的值對其進行初始化。
StringBuilder沒有暗示'capacity'應該是2的冪。是的,每次增長時緩衝區翻倍,但這並不意味着用'StringBuilder'初始化並不是最理想的例如,它的初始大小爲100 –
實際上,它的增長類似於這個'int newCapacity =(value.length + 1)* 2;',所以即使你從一開始,它也不會保持2的冪。 – msandiford
@Oscar Gomez +1儘管使用了'StringBuilder \ Buffer',我從來沒有看過初始化時使用的默認值和容量的兩倍。 – MalsR
建議在哪裏? –