Максимальное количество символов stringbuilder может вместить
Мне нужно написать 10 000 х 30 000 знаков. сможет ли один stringbuilder разместить все символы или я должен думать о массиве stringbuilders? У меня нет доступа к тестовым случаям, поэтому я не могу проверить это сам. Надеюсь, я найду ответ здесь.
спасибо заранее.
изменить:
Я попытался добавить 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 пространство кучи"?
3 ответов
длина является int, поэтому она должна содержать до 2GChar (4GB), если у вас есть память. Вы собираетесь использовать" только " 600MB (300 миллионов @ 2 байта на символ). Просто будь осторожен, сколько копий ты сделаешь... т. е. toString ().
вам нужно беспокоиться о максимальном размере кучи. Не имеет значения, используете ли вы один или несколько объектов StringBuilder.
пока длина последовательности символов, содержащейся в строковом построителе, не превышает емкость, нет необходимости выделять новый внутренний буфер. Если внутренний буфер переполняется, он автоматически увеличивается. И это дает вам максимальное количество символов, которые может содержать память экземпляра StringBuilder в это время.