Что произойдет, если указать максимальный размер кучи больше, чем доступная оперативная память - программирование
Подтвердить что ты не робот

Что произойдет, если указать максимальный размер кучи больше, чем доступная оперативная память

Отвечая на вопрос в интервью. Что произойдет, если указать максимальный размер кучи (Xmx) больше, чем доступная оперативная память? Я также задаюсь вопросом, что произойдет, если вы укажете минимальный размер кучи (Xms) больше, чем доступная оперативная память?

4b9b3361

Ответ 1

Самый простой способ узнать - попробовать и посмотреть.

Edit: На этот вопрос есть как минимум два ответа. Вероятно, на 64-битной системе, как уже упоминалось, ваше приложение может расти и расти в памяти и начинать рушиться. В 32-битной системе история немного отличается, потому что os не может дать вам столько кучи. Например, если я запустил приложение в Windows XP с 32-битным java с параметром командной строки -Xmx2000m, он умрет с сообщением, аналогичным следующему:

Недопустимый максимальный размер кучи: -Xmx2000m

Указанный размер превышает максимально отображаемый размер.

Не удалось создать виртуальную машину Java.

В Linux с 32-битным java я получаю следующее: -Xmx3000m:

Не удалось создать виртуальную машину Java.

Ошибка при инициализации VM

Не удалось зарезервировать достаточно места для кучи объектов

В Linux с 32-битным java я получаю следующее: -Xmx6000m

Недопустимый максимальный размер кучи: -Xmx6000m

Указанный размер превышает максимально отображаемый размер.

Не удалось создать виртуальную машину Java.

Попробовав это с помощью 64-битной Java, JVM позволяет вам выделять больше памяти, чем есть физическая RAM, но если вы запрашиваете чрезвычайно большой объем памяти, jvm снова завершится с ошибкой.

Ответ 2

Ничего Драматического


Хотя это может случиться и с некоторыми низкоуровневыми встроенными системами, в наши дни было бы довольно редко видеть не виртуальную среду Java даже во встроенной и невозможной на рабочем столе или сервере.

Итак, ничего драматичного не произойдет, но как только вы используете доступную ОЗУ, выделение дополнительной (виртуальной) памяти просто излишне задерживает мелиорацию (сбор мусора) и заставляет программу запускать подкачка.

Если это серьезно, это условие называется " thrashing ", и это нехорошо. Материал будет работать медленно.