Невозможно заставить JVM освободить память, System.gc()
это просто подсказка. Управление памятью зависит от GC (обратите внимание, что существуют различные типы памяти, например, куча, метапространство, внеполосная память). Каждый алгоритм GC имеет несколько параметров конфигурации, которые вы можете настроить, но ни один из них не даст вам возможности освободить память по требованию.
JVM резервирует память при запуске и запрашивает дополнительную память у ОС до тех пор, пока она не достигнет установленных пределов. Он делает это с шагом в несколько частей, запрашивая МБ или больше памяти за раз, потому что запрос памяти из байта ОС будет очень неэффективным.
Вот то, что должна сказать документация Oracle :
По умолчанию дамп "кучи" создается в файле под названием Java _ pid.hprof в рабочем каталоге VM, как в примере выше. Можно указать альтернативное имя файла или каталог с
-XX:HeapDumpPath=
опция. Например-XX:HeapDumpPath=/disk2/dumps
заставит дамп "кучи" быть сгенерированным в/disk2/dumps
каталог.