The names and values are confusing. If you are looking for the total free memory you will have to calculate this value by your self. It is not what you get from freeMemory();
.
See the following guide:
Total designated memory, this will equal the configured -Xmx value:
Runtime.getRuntime().maxMemory();
Current allocated free memory, is the current allocated space ready for new objects. Caution this is not the total free available memory:
Runtime.getRuntime().freeMemory();
Total allocated memory, is the total allocated space reserved for the java process:
Runtime.getRuntime().totalMemory();
Used memory, has to be calculated:
usedMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
Total free memory, has to be calculated:
freeMemory = Runtime.getRuntime().maxMemory() - usedMemory;
A picture may help to clarify: