Не удалось зарезервировать достаточно места для кучи объектов - PullRequest
247 голосов
/ 09 декабря 2010

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

Произошла ошибка при инициализации ВМ

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

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

Я пытался увеличить свою виртуальную память (размер страницы) и объем оперативной памяти, но безрезультатно. Может кто-нибудь сказать мне, как я могу устранить эту ошибку?

Ответы [ 25 ]

200 голосов
/ 09 декабря 2010

Запустите JVM с -XX:MaxHeapSize=512m (или любым большим числом, как вам нужно) (или -Xmx512m для краткости)

117 голосов
/ 20 августа 2012

Это также может быть вызвано установкой чего-то слишком большого в 32-разрядной версии HotSpot vm, например:

-Xms1536m -Xmx1536m

, где может / будет работать:

-Xms1336m -Xmx1336m
42 голосов
/ 24 апреля 2013

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

-bash-3.2$ javac -Xmx256M HelloWorldApp.java 
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_OPTIONS

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M

И это прекрасно компилируется.

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

40 голосов
/ 07 мая 2015

вот как это исправить:

  • Перейдите в Пуск-> Панель управления-> Система-> Дополнительно (вкладка) -> Переменные среды-> Система

    Переменные-> Новое: Имя переменной: _JAVA_OPTIONS Значение переменной: -Xmx512M Имя переменной: Path
    Значение переменной: %PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

Измените это на соответствующеепуть.

28 голосов
/ 17 июня 2016

32-битная Java требует непрерывного свободного места в памяти для запуска. Если вы укажете большой размер кучи, свободного места в памяти может быть не так много, даже если у вас будет гораздо больше свободного места, чем необходимо.

Установка 64-битной версии Java помогает в этих случаях, непрерывные требования к памяти применяются только к 32-битной Java.

26 голосов
/ 23 ноября 2011

В сочетании с -Xmx512M используйте -d64, чтобы убедиться, что вы используете 64-битную виртуальную машину. На 64-битной машине я точно думал, что использую 64-битную виртуальную машину, но нет. После установки 64-битной Java работает опция -d64, а -Xmx позволяет значительно увеличить объем памяти.

java -d64 -Xmx512M mypackage.Test
14 голосов
/ 28 декабря 2011

Я получил ту же ошибку и решил ее, настроив в файле run.conf.bat

Запустите JVM с настройкой run.conf.bat в Jboss5x

Если свободной памяти не имеется, поскольку вы передаете оператор, тогда внесите изменения в run.conf.bat

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m
8 голосов
/ 17 февраля 2017

Я знаю, что здесь уже есть много ответов, но ни один из них не помог мне.В конце концов я открыл файл /etc/elasticsearch/jvm.options и изменил:

-Xms2G
-Xmx2G

на

-Xms256M
-Xmx256M

Это решило это для меня.Надеюсь, это поможет кому-то еще здесь.

6 голосов
/ 08 января 2014

Ошибка:

Для ошибки "ошибка произошла во время инициализации vm, не удалось зарезервировать достаточно места для кучи объектов jboss"

Основная причина:

  • Неправильное / недостаточное выделение памяти для нашей JVM, как указано ниже.

  • например. JAVA_OPTS = "- Xms1303m -Xmx1303m -XX: MaxPermSize = 256m" в jboss-eap-6.2 \ bin \ standalone.conf или "JAVA_OPTS = -Xms1G -Xmx1G -XX = MaxMermSize в jboss-eap-6.2 \ bin \ standalone.conf.bat, который является ничем иным, как параметрами пула выделения памяти JVM.

Разрешение:

  • Увеличить размер кучи. Чтобы увеличить размер кучи,
  • goto -> jboss-eap-6.2 \ bin \ standalone.conf.bat или jboss-eap-6.2 \ bin \ standalone.conf
  • change -> JAVA_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m", где -Xms - минимальный размер кучи, а -Xmx - максимальный размер кучи.
  • Обычно не рекомендуется иметь одинаковый размер для минимального и максимального значений.

  • Если вы запускаете приложение из затмения,

  • Двойной клик на сервере
  • выберите «Открыть конфигурацию запуска», и вы будете перенаправлены в окно «Редактировать свойства конфигурации запуска».
  • В этом ветре перейдите на вкладку «(x) = Аргументы».
  • В VM Arguments определите размер кучи, как указано ниже
  • "- Dprogram.name = JBossTools: JBoss EAP 6.1+ Runtime Server" -server -Xms256m -Xmx512m -XX: MaxPermSize = 256m -Dorg.jboss.resolver.warning = true
6 голосов
/ 09 мая 2013

Иногда эта ошибка указывает на то, что физическая память и подкачка на сервере полностью используются!

Недавно я видел эту проблему на сервере под управлением RedHat Enterprise Linux 5.7 с 48 ГБ оперативной памяти. Я обнаружил, что даже просто работает

java -version

вызвало ту же ошибку, которая установила, что проблема не относится к моему приложению.

Бег

cat /proc/meminfo

сообщил, что значения MemFree и SwapFree значительно ниже 1% значений MemTotal и SwapTotal, соответственно:

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB

Остановка нескольких других запущенных приложений на машине несколько увеличила объем свободной памяти:

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB

В этот момент новый экземпляр Java запустится нормально, и я смог запустить свое приложение.

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

...