好吧,我最终自己做了简短的测试,然后在评论后进行了更多测试,以获得经过编辑的答案。
使用JDK 1.7.0_07并测试报告VM名称为“ Java
HotSpot(TM)64位服务器VM”的应用程序,
StringBuilder内存使用的粒度为4个 字符 ,甚至增加了4个字符。
答:从内存分配的角度来看,至少在此64位JVM上 ,4的任意倍数 对于StringBuilder来说都是同样好的容量。
通过在不同的测试程序执行(具有相同的初始堆状态)中创建1000000个具有不同初始容量的StringBuilder对象进行测试,并在打印
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()之前和之后进行打印。
打印出堆大小也得到了确认,
StringBuilder由于Java
char为2个字节长,实际上为每个缓冲区的堆实际分配的数量是8字节的偶数倍。换句话说,分配1000000个初始容量为1..4的实例所花费的内存要比分配相同数量的初始容量为5
… 8的相等数量的内存少8兆字节(每个实例8个字节)。



