2010-03-10 4 views

ответ

4

Это зависит от реализации JVM и не указывается в спецификации.

Солнце JVM будет удерживать его как первый шаг. Когда определенный (настраиваемый) процент выделенной памяти не используется, он вернет часть из них в ОС (на поведение влияет MinHeapFreeRatio and MaxHeapFreeRatio settings).

+0

Я никогда не видел, чтобы виртуальная машина Java ужасно агрессивно относилась к возврату памяти в систему - возможно, это хорошо по умолчанию. Процессы Java, как правило, длительные и постоянно расширяющиеся и сокращающиеся могут фрагментировать память. Для большинства серверных решений освобождение памяти приведет к детерминированному поведению и низкой производительности, однако было бы неплохо, если бы они оставили это решение пользователям (с настройками -Xmx/-Xms). –

1

Вернитесь к процессу сначала, но также можете вернуться в ОС в конце. Память, выделяемая GC, находится в большом смежном фрагменте (куче) или наборе кусков, а GC «freeing» просто освобождает выделение в куче, но не обязательно возвращается к ОС. Как только GC уплотняется, VM может вернуть некоторую память в ОС.

GC хочет удержать определенное пространство, чтобы он мог быстро обслуживать будущие «новые» запросы на память. Таким образом, GC делает запросы к ОС для памяти в больших сегментах, как можно реже.

Смежные вопросы