java中的StringBuffer / StringBuilder大小

时间:2011-08-16 03:31:37

标签: java buffer stringbuilder stringbuffer

所有

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

  

这样做会有什么优势/优化?

我不认为这样做有任何好处。

我的建议是选择一个比预期尺寸略大的初始尺寸...如果你有一个中等的好估计。如果您没有估计,通过提供初始大小,您将无法获得太多收益。

使用超出估计值的初始大小并不是一个好主意。它浪费了空间,并且JVM必须将所有那些在某些时候不使用的字符归零,这些字符需要花费CPU /内存周期。

[应该可以凭经验确定低估和高估尺寸的成本,并与使用默认初始尺寸的成本进行比较。但是,这些数字可能取决于JIT优化器的优异程度,以及可以复制内存的速度与归零速度之间的差异。换句话说,它们将是特定于平台的。]