StringBuilder可以容纳的最大字符数

12
我需要写入10,000 x 30,000个字符。单个StringBuilder能否容纳所有字符,还是我应该考虑使用一个StringBuilder数组?由于我无法访问测试用例,因此无法自行验证。希望我能在这里找到答案。
提前致谢。
编辑:
我尝试使用循环添加了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 heap space"问题?

3个回答

18

这个长度是一个整数,所以它可以容纳多达2GChar(4GB)的字符,假设您有足够的内存。你只会使用"仅仅"600MB(3亿@每个字符2字节)。只要小心你最终制作多少拷贝,比如toString()。


我尝试使用循环添加10000x30000个字符,但出现错误。请查看编辑。 - Victor Mukherjee
2
你需要使用命令行选项-Xms1024m -Xmx1536m来增加虚拟机的堆空间,这将把初始分配设置为1GB,最大值设置为1.5GB。如果你在32位环境下运行,这可能会有问题。 - Jim Garrison

3

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


1
只要字符串构建器中包含的字符序列长度不超过其容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则会自动扩大。并且它会告诉您此StringBuilder实例内存可以容纳的最大字符数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接