Do you actually get OutOfMemory errors?
The heap may not grow to its max size until it needs to, so the "free memory" reported will just be the memory available within the current allocation (which may be allowed to be extended if necessary until that maximum is finally reached).