stringbuilder可容纳的最大字符数

时间:2012-10-06 08:28:40

标签: java stringbuilder max

我需要写10,000 x 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堆空间"?

3 个答案:

答案 0 :(得分:16)

长度是一个int,所以假设你有内存,它应该保持2GChar(4GB)。您将使用“仅”600MB(每个字符3亿个@ 2字节)。要小心你最终制作了多少副本......即toString()。

答案 1 :(得分:3)

您需要担心的是最大堆大小。无论使用单个还是多个StringBuilder对象,都没有任何区别。

答案 2 :(得分:1)

只要字符串生成器中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区。如果内部缓冲区溢出,它会自动变大。它为您提供此StringBuilder实例内存此时可以容纳的最大字符数。