java - StringBuilder.append() 中的 OutOfMemoryError 即使有足够的内存

标签 java out-of-memory stringbuilder

即使我将内存大小设置为 32 GB 并且仅将 500 MB 的文件读入构建器,我也会从 java.lang.StringBuilder.append 收到 OutOfMemoryError。

java.lang.OutOfMemoryError: null
    at java.base/java.lang.AbstractStringBuilder.hugeCapacity(AbstractStringBuilder.java:214) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.newCapacity(AbstractStringBuilder.java:206) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:173) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538) ~[na:na]
    at java.base/java.lang.StringBuilder.append(StringBuilder.java:174) ~[na:na]
    at com.github.loa.indexer.service.index.base64.Base64Encoder.encode(Base64Encoder.java:31) ~[classes/:na]

最佳答案

发生这种情况是因为 StringBuilder 想要分配的字节数组需要比 JVM 允许的更大的数组大小(超过 2147483647 个又名 Integer.MAX_VALUE 元素)。

关于java - StringBuilder.append() 中的 OutOfMemoryError 即使有足够的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56384118/

相关文章:

java - 第二个 main() 类看不到在第一个 main() 类中初始化的变量

java - 如果然后条件在 java 中使用正则表达式

java - Matlab Builder JA libtbb.dylib 错误

Clojure : Get "OutOfMemoryError Java heap space" when parsing big log file

java - J2ME中 "System.gc()"的作用是什么?

java - 如何从字符串中删除重复字符

java - Java用+优化了多少字符串连接?

c# - .NET StringBuilder 前加一行

java - 如何在 OSX 上运行用 Java 8 编写的 IntelliJ 插件?

java - 在 Ubuntu 上作为守护进程运行时,如何给 Jenkins 更多的堆空间?