即使我将内存大小设置为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]
答案 0 :(得分:5)
之所以会这样,是因为StringBuilder要分配的字节数组需要的数组大小要比JVM允许的大小大(超过2147483647个aka Integer.MAX_VALUE元素)。