Максимальное количество символов, которое может вместить stringbuilder

Мне нужно написать 10 000 х 30 000 символов. сможет ли один построитель строк разместить все символы или мне следует подумать о массиве построителей строк? У меня нет доступа к тестовым примерам, поэтому я не могу проверить это сам. Надеюсь, здесь я найду ответ.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Я попытался добавить 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»?


person Victor Mukherjee    schedule 06.10.2012    source источник


Ответы (3)


Длина представляет собой целое число, поэтому оно должно содержать до 2GChar (4 ГБ), если у вас есть память. Вы собираетесь использовать «всего» 600 МБ (300 миллионов по 2 байта на символ). Просто будьте осторожны, сколько копий вы в конечном итоге сделаете... то есть toString().

person Jim Garrison    schedule 06.10.2012
comment
Я пытался добавить символы 10000x30000 с помощью цикла, и это дает ошибки. пожалуйста, смотрите редактирование. - person Victor Mukherjee; 06.10.2012
comment
Вам необходимо увеличить пространство кучи, доступное для виртуальной машины, с помощью параметра командной строки -Xms1024m -Xmx1536m, который установит начальное выделение на 1 ГБ, а максимальное значение — на 1,5 ГБ. Если вы работаете в 32-битной среде, это может быть проблематично. - person Jim Garrison; 07.10.2012

Вам нужно беспокоиться о максимальном размере кучи. Не имеет значения, используете ли вы один или несколько объектов StringBuilder.

person Sameer    schedule 06.10.2012

Пока длина последовательности символов, содержащейся в построителе строк, не превышает емкости, нет необходимости выделять новый внутренний буфер. Если внутренний буфер переполняется, он автоматически увеличивается. И это дает вам максимальное количество символов, которое может хранить эта память экземпляра StringBuilder в это время.

person Subhrajyoti Majumder    schedule 06.10.2012