Вопрос по java, max, stringbuilder – Максимальное количество символов, которое может вместить stringbuilder

9

Мне нужно написать 10000 х 30000 символов. Сможет ли один строковый строитель объединить все символы или я должен подумать о массиве строителей строк? У меня нет доступа к контрольным случаям, поэтому я сам не могу проверить это. Надеюсь, я найду ответ здесь.

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

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

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

Ваш Ответ

3   ответа
3

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

16

Длина - это int, поэтому она должна содержать до 2GChar (4 ГБ), если у вас есть память. Вы собираетесь использовать & quot; только & quot; 600 МБ (300 миллионов при 2 байтах на символ). Просто будьте осторожны, сколько копий вы сделаете ... то есть toString ().

Я попытался добавить 10000x30000 символов, используя цикл, и это дает ошибки. пожалуйста, смотрите редактирование. Victor Mukherjee
Вам нужно увеличить пространство кучи, доступное для виртуальной машины с-Xms1024m -Xmx1536m опция командной строки, которая установит начальное выделение 1 ГБ, а максимальное - 1,5 ГБ. Если вы работаете в 32-битной среде, это может быть проблематично.
1

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

Похожие вопросы