Когда сборщик мусора запускает и освобождает память, эта память возвращается в ОС или хранится как часть процесса. У меня было сильное впечатление, что память никогда не выводится обратно в ОС, но сохраняется как часть области памяти/пула, которую нужно повторно использовать одним и тем же процессом.
В результате фактическая память процесса никогда не уменьшится. В статье, которая напомнила мне об этом, и Javas Runtime написано на C/С++, поэтому я думаю, что то же самое относится?
Обновление
Мой вопрос касается Java. Я упоминаю C/С++, так как я предполагаю, что выделение/освобождение Javas выполняется JRE с использованием некоторой формы malloc/delete