11

我需要写 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堆空间”怎么办?

4

3 回答 3

18

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

于 2012-10-06T08:33:51.233 回答
3

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

于 2012-10-06T08:34:37.827 回答
1

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

于 2012-10-06T08:34:43.587 回答