Предоставляет ли JVM бесплатную память для ОС, когда она больше не нужна?

У меня есть приложение, которое временно требует определенного объема памяти/кучи для некоторых процессов. Учитывая разумное значение максимального размера кучи для JVM в качестве опции, JVM начинается с небольшой кучи и запрашивает больше памяти из ОС по требованию.

Мой вопрос: если эта дополнительная память будет возвращена JVM в ОС (например, для других процессов), когда мое приложение больше не нуждается в большой памяти. В настоящее время мое приложение, похоже, сохраняет эту память навсегда, даже если это не нужно больше.

Ответ 1

JVM возвращает память в ОС, но только очень неохотно, так как может потребоваться ее снова в ближайшее время, а получение памяти из ОС - относительно дорогостоящая операция.

Если вы хотите, чтобы JVM более оперативно возвращал память в ОС, вы можете использовать параметры настройки JVM Oracle, в частности -XX:MaxHeapFreeRatio и -XX:MinHeapFreeRatio

Ответ 2

Не обязательно. Это зависит от используемой вами JVM. Я знаю один случай с IBM JVM. У нас также была проблема с программой, не освобождающей память, даже когда она не нужна. Некоторая информация может быть найдена на сайте IBM.

Ответ 3

Это зависит от версии и от сборщиков мусора. Я обнаружил, что java 1.8.0_73 иногда выпускает небольшие суммы обратно в ОС по умолчанию. Это самая ранняя версия, которую я помню, увидев ее без необходимости настройки параметров JVM, но она может очень хорошо применяться к более ранним, я не знаю точной версии.

Если параметры не настроены, по умолчанию он, вероятно, ничего не выпустит, если 60-70% вашей кучи не используется.

В этом может случиться мнение о производительности - у java была репутация медленной работы, поэтому по умолчанию JVM может попытаться свести к минимуму выделение из ОС и сделать сборку мусора настолько эффективным, насколько это возможно, удержавшись на большой памяти и делая это реже.

Интересно, может ли это быть менее скупой с памятью, если у OS осталось относительно немного свободной памяти.?