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

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

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

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

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

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

28 ответов

Решение

Запустите JVM с -XX:MaxHeapSize=512m (или любое большое число) (или -Xmx512m коротко)

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

-Xms1536m -Xmx1536m

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

-Xms1336m -Xmx1336m

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

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

Переменные-> Новый: Имя переменной: _JAVA_OPTIONS

Значение переменной: -Xmx512M

Имя переменной: Path
Значение переменной: %PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

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

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

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

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

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

java -d64 -Xmx512M mypackage.Test

Откройте файл gradle.properties в папке android.

Замените эту строку:

org.gradle.jvmargs=-Xmx1536M

с:

org.gradle.jvmargs=-Xmx512m

Объяснение: Максимальный предел из документа Gradle:

Если в запрошенной среде сборки не указан максимальный размер кучи, демон будет использовать до 512 МБ кучи.

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

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

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

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

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

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

-Xms2G
-Xmx2G

в

-Xms256M
-Xmx256M

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

Ошибка:

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

Первопричина:

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

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

Разрешение:

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

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

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

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

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

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

Предположим, ваш класс называется Test в упаковке mypackage, Запустите ваш код так:

java -Xmx1024m mypackage.Test

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

java -Xmx512m mypackage.Test

Используйте немного м в 1024m, 512m, так далее

У меня было правильное количество настроек памяти, но для меня это было использование 64-битного Intellij с 32-битной JVM. Как только я переключился на 64-битную ВМ, ошибка исчезла.

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

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

Я работал на x86-64 Linux с 64-разрядной JVM.

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

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

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

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

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

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

ИЛИ ЖЕ

Измените вызов муравья, как показано ниже.

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

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

Произошла ошибка во время инициализации виртуальной машины. Не удалось зарезервировать достаточно места для кучи объектов размером 1572864 КБ.

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

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

Имя переменной: _JAVA_OPTIONS Значение переменной: -Xmx512M

В моем случае я не мог увеличить org.gradle.jvmargs=-Xmx...в gradle.propertiesсвыше 1 ГБ. Это не сработало, потому что на моей машине было две установки Java, одна 32-битная (Gradle использовал эту), а другая 64-битная. Я решил проблему, добавив JAVA_HOMEпеременная среды, указывающая на 64-битную Java.

Вышеуказанные ответы верны, но я объясню эту проблему с лучшим решением. Когда вы назначили org.gradle.jvmargs=-Xmx512m и все еще сталкиваетесь с проблемой sa,=me, то вот решение. В основном эта ошибка возникает из-за того, что ваш компьютер использует 100% своей мощности, а ваш проект использует так много ресурсов , всякий раз, когда вы сталкиваетесь с этой проблемой, вы можете открыть диспетчер задач, и вы увидите, что ваш диск используется на 100%, а ваш компьютер слишком медленный, тогда вы можете просто отключить запускаемые приложения, которые интенсивно обрабатываются, и перезагрузить компьютер. После перезапуска, когда вы открываете свой проект, сначала очистите его, а затем попробуйте запустить. Я пробовал все вышеперечисленное решение, но все еще не смог решить проблему, затем я попытался освободить использование памяти и фоновые процессы, и моя проблема была решена.

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

В 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 Box, измените в файле.sh соответствующим образом.

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

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

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

$ sysctl vm.overcommit_memory=0

Он должен работать.

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

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

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

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

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

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>
Другие вопросы по тегам