11

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

前もって感謝します。

編集:

ループを使用して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ヒープスペース」をどうするか?

4

3 に答える 3

18

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

于 2012-10-06T08:33:51.233 に答える
3

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

于 2012-10-06T08:34:37.827 に答える
1

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

于 2012-10-06T08:34:43.587 に答える