java中的StringBuffer/StringBuilder大小

java中的StringBuffer/StringBuilder大小,java,buffer,stringbuilder,stringbuffer,Java,Buffer,Stringbuilder,Stringbuffer,全部, 为什么建议将StringBuffer/StringBuilder对象的大小初始化为2^{1…n}(尽管通常大于64)。这样做的好处/优化是什么?这一建议是因为,默认情况下,构造函数将使用大小为16的对其进行初始化,并且每当超过此容量时,它将加倍,并创建一个新的 因此,如果您确定将使用16个以上的空格,则应使用更高的值对其进行初始化 这样做的好处/优化是什么 我认为这样做没有任何好处 我的建议是选择一个比预期尺寸稍大一点的初始尺寸。。。如果你有一个中等好的估计。如果您没有估算值,那么提供初

全部,


为什么建议将
StringBuffer
/
StringBuilder
对象的大小初始化为2^{1…n}(尽管通常大于64)。这样做的好处/优化是什么?

这一建议是因为,默认情况下,构造函数将使用大小为16的对其进行初始化,并且每当超过此容量时,它将加倍,并创建一个新的

因此,如果您确定将使用16个以上的空格,则应使用更高的值对其进行初始化

这样做的好处/优化是什么

我认为这样做没有任何好处

我的建议是选择一个比预期尺寸稍大一点的初始尺寸。。。如果你有一个中等好的估计。如果您没有估算值,那么提供初始大小将不会有多大收益

使用明显高估的初始大小不是一个好主意。它会浪费空间,JVM将不得不将您在某个时候不使用的所有字符归零,这会消耗CPU/内存周期


[根据经验,应该可以计算出低估和高估大小的成本,并与使用默认初始大小的成本进行比较。然而,这些数字可能取决于JIT优化器的性能,以及诸如内存复制速度与归零速度的对比。换句话说,它们将是平台具体形式。]

这建议在哪里?在
StringBuilder
源代码中没有任何东西暗示
容量应该是2的幂。是的,当缓冲区每次增加一倍时,但这并不意味着初始化
StringBuilder
的初始大小(例如100)不是最佳的。实际上,它是这样增长的
int newCapacity=(value.length+1)*2;
,因此即使从一开始就使用二次幂,也不会保持二次幂。@Oscar Gomez+1,即使使用了
StringBuilder\Buffer
我从未查看过初始化时使用的默认值和容量加倍。