StringBuilder.append()中的OutOfMemoryError甚至有足够的内存

时间:2019-05-30 18:57:41

标签: 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]

1 个答案:

答案 0 :(得分:5)

之所以会这样,是因为StringBuilder要分配的字节数组需要的数组大小要比JVM允许的大小大(超过2147483647个aka Integer.MAX_VALUE元素)。