Дает ли JVM свободную память ОС, когда она больше не нужна? - PullRequest
14 голосов
/ 07 января 2011

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

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

Ответы [ 3 ]

25 голосов
/ 07 января 2011

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

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

3 голосов
/ 07 января 2011

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

0 голосов
/ 12 января 2017

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

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

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

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

...