Java not using all free memory.
Hello,
So can someone explain why I see this behaviour?
Code:
Runtime runtime = Runtime.getRuntime();
System.out.println("free memory: " + runtime.freeMemory());
byte[] a = new byte[4000000];
System.out.println("free memory: " + runtime.freeMemory());
gives
Code:
free memory: 9854904
free memory: 5854888
(9854904-5854888 gives 4000016)
Code:
Runtime runtime = Runtime.getRuntime();
System.out.println("free memory: " + runtime.freeMemory());
int[] a = new int[1000000];
System.out.println("free memory: " + runtime.freeMemory());
gives
Code:
free memory: 9854904
free memory: 5854888
(9854904-5854888 gives 4000016 (exact same as before))
Code:
Runtime runtime = Runtime.getRuntime();
System.out.println("free memory: " + runtime.freeMemory());
byte[] a = new byte[4000000];
int[] b = new int[1000000];
System.out.println("free memory: " + runtime.freeMemory());
gives
Code:
free memory: 9854904
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at ***.***.***.***.***.***.mergetest.main(mergetest.java:35)
What on earth is going on?
Surely allocating those two arrays should only take up 8000032 bytes, well within the 9854904 java reports as having free...