Memory usage of byte array in Java

arrays, java, memory, ram

Solution

Probably because the Java heap is being used and fragmented by other data in your program.

That byte array needs to be allocated as one contiguous 1.5 GB chunk of memory within the Java heap space. (This isn't required by the Java language spec, but AFAIK is how all current JVM implementations actually work.) Some of your heap space is being consumed and – probably more importantly – fragmented by the other memory allocations that happen in your program prior to allocating that big byte array. That `java -Xmx2153M Main` may be how big you have to make the overall heap for there to be a contiguous 1.5 GB space left by the time you get to the allocation.

If you chop up that big array into 100 smaller arrays 1/100th the size, it may fit in to a smaller heap because it's not as sensitive to heap fragmentation.

Problem

For a heuristic precomputed table i need a byte array with 1504935936 entries. This should take about 1.5 GB of Memory. ``` public class Main{ public static void main(String[] args){ byte[] arr = new byte[1504935936]; } } ``` Why do I have a "OutOfMemoryError: Java heap space"-Exception, if I give the program 2 GB of RAM with ``` java -Xmx2048M Main ``` With ``` java -Xmx2153M Main ``` it works. Why does it need that much RAM?

Original source

Related problems