2012-10-06 1 views
7

10,000文字×30,000文字を書く必要があります。 1つの文字列作成者がすべての文字を翻訳することができますか?あるいは、文字列作成者の配列を考えるべきですか?私はテストケースにアクセスすることができないので、私はそれを実際に検証することはできません。私はここで答えを見つけることを願っています。最大文字数stringbuilderに対応可能

ありがとうございます。

EDIT:

私はループを使用して10000 X 30000文字を追加しようとしました。私は以下の例外を受け取ります。

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 heap space」とは何ですか?

答えて

14

長さはintなので、メモリがある場合は2GChar(4GB)まで保持する必要があります。あなたは "600MB"(1文字につき2億バイトで3億ドル)を使用します。どのくらい多くのコピーを作成するか、つまりtoString()に注意してください。

+0

ループを使用して10000x30000文字を追加しようとしましたが、エラーが発生します。編集をご覧ください。 –

+2

'-Xms1024m -Xmx1536m'コマンドラインオプションを使用してVMに使用できるヒープスペースを増やす必要があります。これにより、最初の割り当てを1GBに、最大を1.5GBに設定します。 32ビット環境で実行している場合は、問題がある可能性があります。 –

3

あなたが心配する必要があるのは、最大ヒープサイズです。 1つまたは複数のStringBuilderオブジェクトを使用するかどうかには違いはありません。

1

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

関連する問題