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

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

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

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

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

Я пытался увеличить свою виртуальную память (размер страницы) и объем оперативной памяти, но безрезультатно.

Как я могу устранить эту ошибку?

Ответ 1

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

Ответ 2

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

-Xms1536m -Xmx1536m

где это могло бы/работать:

-Xms1336m -Xmx1336m

Ответ 3

Я столкнулся с этим при использовании 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 решает выделить большую кучу, потому что обнаруживает оперативную память в машине, но ей не разрешено выделять ее из-за ограничений.

Ответ 4

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

  • Перейдите на Start-> Управление Panel-> Система-> Дополнительно (вкладка) → Среда Variables-> Система

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

Измените это на свой подходящий путь.

Ответ 5

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

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

Ответ 6

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

java -d64 -Xmx512M mypackage.Test

Ответ 7

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

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

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

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m

Ответ 8

У меня были похожие проблемы. Я установил 32-битную версию Java на 64-битной машине.

Удалив эту версию и установив 64-битную версию Java. Я был в состоянии решить проблему.

Ответ 9

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

-Xms2G
-Xmx2G
от

до

-Xms256M
-Xmx256M

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

Ответ 10

Предположим, что ваш класс называется Test в пакете mypackage. Выполните свой код следующим образом:

java -Xmx1024m mypackage.Test

Это зарезервирует 1024 мегабайта кучи для вашего кода. Если вы хотите 512 МБ, вы можете использовать:

java -Xmx512m mypackage.Test

Используйте мало m в 1024m, 512m и т.д.

Ответ 11

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

Недавно я видел эту проблему на сервере с 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 запустится правильно, и я смог запустить свое приложение.

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

Ответ 12

Ошибка:

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

Корневая причина:

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

  • например. JAVA_OPTS = "- Xms1303m -Xmx1303m -XX: MaxPermSize = 256m" в jboss-eap-6.2\bin\standalone.conf или "JAVA_OPTS = -Xms1G -Xmx1G -XX: MaxPermSize = 256M" в 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 - максимальный размер кучи.
  • Обычно его не рекомендуется иметь одинаковый размер для min и max.

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

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

Ответ 13

Недавно я столкнулся с этой проблемой. У меня есть 3 java-приложения, которые начинаются с размера кучи 1024 или 1280 м. Java просматривает доступное пространство в swap, и если доступной памяти недостаточно, jvm завершает работу.

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

Я работал на x86-64 linux с 64-битным jvm.

Ответ 14

Предполагая, что у вас достаточно свободной памяти, и вы правильно настроили аргументы JVM, у вас может возникнуть проблема фрагментации памяти. Проверьте максимальную память Java в Windows XP.

Ответ 15

Если вы используете 32-битную JVM, размер смены кучи на меньшую, вероятно, поможет. Вы можете сделать это, передав аргументы в java напрямую или через переменные окружения, такие как следующие,

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

Для 64-битной JVM должен работать больший размер кучи, например -Xms512M -Xmx1536M.

Запустите java -version или java -d32, java--d64 для Java7, чтобы проверить, какая версия вы используете.

Ответ 16

У меня было правильное количество настроек памяти, но для меня он использовал 64-битный intellij с 32-битным jvm. Как только я переключился на 64-битную виртуальную машину, ошибка исчезла.

Ответ 17

В любом случае, вот как это исправить: Перейдите в Пуск- > Панель управления- > Система- > Дополнительно (вкладка) → Переменные среды- > Системные переменные- > Новые: Имя переменной: _JAVA_OPTIONS Значение переменной: -Xmx512M

ИЛИ

Измените вызов ant, как показано ниже.

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>

Это сработало для меня.

Ответ 18

Ошибка при инициализации виртуальной машины          Не удалось зарезервировать достаточно места для кучи объектов 1572864KB

Я изменил значение памяти в файле settings.grade 1536 - 512, и это помогло

Ответ 19

Перейдите на Start-> Управление Panel-> Система-> Дополнительно (вкладка) → Среда Variables-> Система Variables-> Новое:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

Ответ 20

Если вы используете java-программу: - запустите свою программу в терминале, используя правильную команду для linux, это будет "java -jar myprogram.jar" и добавьте -Xms256m -Xmx512m, например: "java -jar myprogram.jar Xms256m -Xmx512m"

Если вы используете .sh script (linux, mac?) или .bat script (windows), откройте script и найдите опции java, если они присутствуют, и увеличьте память.

Если все вышеописанное не работает, проверьте свои процессы (ctrl + alt + delete в Windows) (ps aux on linux/mac) и убейте процессы, которые используют выделение памяти и не нужны для вашей операционной системы! = > Попробуйте повторно запустить вашу программу.

Ответ 21

В CASSANDRA_HOME/bin/cassandra.bat вы найдете следующую конфигурацию

REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^

Вы можете уменьшить 2G до некоторого меньшего числа, например. 1G или даже меньше, и он должен работать.

Если вы работаете в unix-окне, замените файл .sh соответствующим образом.

Ответ 22

Иногда это относится как

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

Если вы установите его на:

$ sysctl vm.overcommit_memory=0

Это должно работать.

Ответ 23

Замените -Xmx2G на -Xms512M или любой больший объем памяти в файле cassandra.bat в каталоге cassandra bin.

Ответ 24

У меня такая же ошибка, и она была решена, когда я удалил временные файлы с помощью% temp% и перезапустил eclipse.

Ответ 25

Нет необходимости делать что-либо просто в файле POM, как показано ниже

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>