2016-09-06 5 views
1

Я хочу использовать последний сборщик мусора G1, однако я столкнулся с ситуацией, когда я использовал ошибки выделения памяти при ее использовании. Я считаю, что это связано с тем, что он возвращает память обратно в ОС, и ОС не позволяет JVM вернуть ее, когда она запрашивается, поскольку это не происходит с CMS-сборщиком. Конкретный сервер, на котором я работаю, прекрасно работает с сборщиком CMS (помимо некоторых менее идеальных GC-пауз), как только я перехожу к G1, он сталкивается с этими ошибками распределения примерно через 6 часов работы и существует JVM.Запретить JVM освобождать кучу обратно в ОС при использовании коллектора G1

Непонятно, возможно ли предотвратить это с коллекционером G1, но я надеялся, что у кого-то в сообществе будет ответ.

Спасибо!

+2

Параметр '-Xms' устанавливает начальную кучу, выделенную для JVM. Я бы подумал, что это может помешать освобождению выделенной кучи обратно в ОС. –

+0

Действительно ли вы определили, что «ОС не позволяет JVM вернуть его»? Или это просто вывод из наблюдения отсутствия сбоев с CMS? – the8472

+0

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

ответ

0

-XX:MaxHeapFreeRatio=100 должен помешать уменьшению размера кучи.

Сказанное было бы более глубокой проблемой, если бы это фактически устранило сбой jvm. Либо на машине достаточно памяти для всех запросов на распределение из приложений, либо нет. Если вы позволите JVM оставаться жадным, тогда что-то еще придется страдать.

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