web-dev-qa-db-ja.com

stringbuilderが収容できる最大文字数

10,000 x30,000文字を書く必要があります。単一のstringbuilderですべての文字を収容できるのでしょうか、それともstringbuilderの配列について考える必要がありますか?私はテストケースにアクセスできないので、実際に自分で検証することはできません。ここで答えが見つかることを願っています。

前もって感謝します。

編集:

ループを使用して10000x30000文字を追加しようとしました。次の例外があります。

Exception in thread "main" Java.lang.OutOfMemoryError: Java heap space
at Java.util.Arrays.copyOf(Arrays.Java:2367)
at Java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.Java:130)
at Java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.Java:114)
at Java.lang.AbstractStringBuilder.append(AbstractStringBuilder.Java:415)
at Java.lang.StringBuilder.append(StringBuilder.Java:132)
at Test.main(Test.Java:19)

この「Javaヒープスペース」をどうするか?

9

長さはintであるため、メモリがあると仮定すると、最大2GChar(4GB)を保持する必要があります。 「たった」600MB(1文字あたり2バイトで3億)を使用します。最終的に作成するコピーの数に注意してください...つまり、toString()。

16
Jim Garrison

心配する必要があるのは、最大ヒープサイズです。単一のStringBuilderオブジェクトを使用する場合でも、複数のStringBuilderオブジェクトを使用する場合でも違いはありません。

3
Sameer

文字列ビルダーに含まれる文字シーケンスの長さが容量を超えない限り、新しい内部バッファーを割り当てる必要はありません。内部バッファがオーバーフローすると、自動的に大きくなります。また、このStringBuilderインスタンスメモリが現時点で保持できる最大文字数がわかります。