Рубрики
Без рубрики

Не Удалось Зарезервировать Достаточно Места Для Кучи Объектов

Узнайте о возможных причинах ошибки “Не удалось зарезервировать достаточно места для кучи объектов” и о том, как ее решить.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы узнаем причину ошибки “Не удалось зарезервировать достаточно места для кучи объектов” , а также рассмотрим некоторые возможные сценарии.

2. Симптомы

“Не удалось зарезервировать достаточно места для кучи объектов” – это конкретная ошибка JVM, которая возникает, когда процесс Java не может создать виртуальную машину из-за ограничений памяти, возникающих в запущенной системе:

java -Xms4G -Xmx4G -jar HelloWorld.jar

Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Как правило, есть два возможных сценария, когда мы сталкиваемся с ошибкой.
Во-первых, когда мы запускаем процесс Java с параметром max heap size limit ( -Xmx )
и значение больше, чем может иметь процесс в операционной системе
.

Ограничение размера кучи варьируется в зависимости от нескольких ограничений:

  • аппаратная архитектура (32/64 бит)
  • Разрядная версия JVM (32/64 бит)
  • операционная система, которую мы используем

Во-вторых, когда процесс Java не может зарезервировать указанный объем памяти из-за других приложений, которые работают в той же системе и потребляют память.

3. Размер Кучи

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

Давайте посмотрим, каков максимальный размер кучи в разных средах и как мы можем установить ограничения.

3.1. Максимальный Размер Кучи

Максимальный теоретический предел кучи для 32-разрядной и 64-разрядной JVM легко определить, посмотрев на доступное пространство памяти: 2^32 (4 ГБ) для 32-разрядной JVM и 2^64 (16 экзабайт) для 64-разрядной JVM.

На практике, из-за различных ограничений, предел может быть намного ниже и варьируется в зависимости от операционной системы. Например, в 32-разрядных системах Windows максимальный размер кучи составляет от 1,4 ГБ до 1,6 ГБ . В отличие от этого, в 32-разрядных системах Linux максимальный размер кучи может достигать 3 ГБ.

По этой причине если приложению требуется большая куча, мы должны использовать 64-разрядную JVM . Однако при большой куче у сборщика мусора будет больше работы, поэтому важно найти хороший баланс между размером кучи и производительностью.

3.2. Как Контролировать Ограничения Размера Кучи?

У нас есть два варианта управления ограничениями размера кучи JVM.

Во-первых, используя параметры командной строки Java | при каждой инициализации JVM:

-Xms    Sets initial Java heap size. This value must be a multiple of 1024 and greater than 1 MB.
-Xmx    Sets maximum Java heap size. This value must be a multiple of 1024 and greater than 2 MB.
-Xmn    Sets the initial and maximum size (in bytes) of the heap for the young generation.

Для значения размера мы можем добавить букву k или K , m или M и g или G , чтобы указать килобайты, мегабайты и гигабайты соответственно. Если буква не указана, используется единица измерения по умолчанию (байт).

-Xmn2g
-Xmn2048m
-Xmn2097152k
-Xmn2147483648

Во-вторых, используя переменную среды JAVA_OPTS для глобальной настройки параметров командной строки Java. Благодаря этому каждая инициализация JVM в системе будет автоматически использовать конфигурации, заданные в переменной среды.

JAVA_OPTS="-Xms256m -Xmx512m"

Для получения дополнительной информации ознакомьтесь с нашим полным руководством по параметрам JVM.

4. Заключение

В этом уроке мы обсудили два возможных сценария, когда JVM не может зарезервировать достаточно места для кучи объектов . Мы также узнали, как контролировать ограничения размера кучи, чтобы уменьшить эту ошибку.

Затем узнайте больше о потенциальных проблемах с памятью во время выполнения и о том, как их идентифицировать .