Search code examples
javaout-of-memorystringbuilder

OutOfMemoryError in StringBuilder.append() even with more than enough memory


I get an OutOfMemoryError from java.lang.StringBuilder.append even when I set the memory size to 32 GB and reading only a 500 MB file into the builder.

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]

Solution

  • This happens because the byte array that the StringBuilder want to allocate would require a larger array size than allowed by the JVM (more than 2147483647 aka Integer.MAX_VALUE elements).