Хей, бро, не тупи. Память это не нечто эфимерное так то. Если у тебя в куче 5 объектов по 16 байт, это вовсе не говорит, что ос думает, что куча занимает 80 байт. Нет. Ос думает, что куча занимает столько памяти, сколько жава запросила. Дальше оське уже все равно на то что там происходит.
Почему жава жрет больше чем ей нужно? Очень просто. Выделение памяти это занятие не из быстрых. Хотя даже не само выделение, а, скорее, возможный последующий перенос массива из одного куска памяти в другой. Таким образом выходит, что иметь заранее преаллоцированую кучу куда эффективней, чем вечно освобождать и забирать память. В реалиях жавы считается хорошим тоном ставить одинаковые xmx и xms.
Возможно, с точки зрения калькуляторов это варварство, но жава делается для энтерпрайза, и за счет таких вот фич у нее работа с памятью одна из самых эффективных. Тот же го проигрывает капитально, чему я удивился не слабо в свое время.