4

全て、

StringBuffer/オブジェクトのサイズを 2^{1...n} のサイズに初期化することが推奨されるのはなぜですかStringBuilder(ただし、通常は > 64 になります)。そうすることで、どのような利点/最適化が達成されるでしょうか?

4

2 に答える 2

7

提案は、コンストラクターがデフォルトで 16 のサイズで初期化し、この容量を超えるたびに2 倍になって新しい容量を作成するためです。

したがって、16 個を超えるスペースを使用することが確実にわかっている場合は、より大きな値で初期化する必要があります。

于 2011-08-16T03:34:34.213 に答える
3

そうすることで達成される利点/最適化は何でしょうか?

これを行うことに何の利点もないと思います。

私のアドバイスは、予想サイズよりも少し大きい初期サイズを選択することです...適度に良い見積もりがある場合。見積もりがない場合は、初期サイズを指定してもあまりメリットはありません。

大幅に過大評価されている初期サイズを使用することはお勧めできません。スペースを浪費し、JVMは、CPU/メモリサイクルを消費するある時点で使用しない文字をすべてゼロにする必要があります。

[サイズを過小評価および過大評価するコストを経験的に把握し、デフォルトの初期サイズを使用するコストと比較できるはずです。ただし、数値は、JITオプティマイザーがどれだけ優れているか、およびメモリーのコピー速度とゼロ化速度などに依存する可能性があります。つまり、プラットフォーム固有になります。]

于 2011-08-16T05:21:30.417 に答える