Ответ 1
Запустите JVM с -XX:MaxHeapSize=512m
(или любым большим числом, как вам нужно) (или -Xmx512m
для краткости)
Я получаю следующее исключение несколько раз каждый раз, когда пытаюсь запустить программу.
Произошла ошибка при инициализации ВМ
Не удалось зарезервировать достаточно места для кучи объектов
Не удалось создать виртуальную машину Java.
Я пытался увеличить свою виртуальную память (размер страницы) и объем оперативной памяти, но безрезультатно.
Как я могу устранить эту ошибку?
Запустите JVM с -XX:MaxHeapSize=512m
(или любым большим числом, как вам нужно) (или -Xmx512m
для краткости)
Это также может быть вызвано установкой чего-то слишком большого в 32-битном HotSpot vm, например:
-Xms1536m -Xmx1536m
где это могло бы/работать:
-Xms1336m -Xmx1336m
Я столкнулся с этим при использовании 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 решает выделить большую кучу, потому что обнаруживает оперативную память в машине, но ей не разрешено выделять ее из-за ограничений.
вот как это исправить:
Перейдите на Start-> Управление Panel-> Система-> Дополнительно (вкладка) → Среда Variables-> Система
Variables-> Новое: Имя переменной: _JAVA_OPTIONS
Значение переменной: -Xmx512M
Имя переменной: Path
Значение переменной: %PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;
Измените это на свой подходящий путь.
32-битная Java требует непрерывного свободного места в памяти для запуска. Если вы укажете большой размер кучи, свободного места в памяти может быть не так много, даже если у вас будет гораздо больше свободного места, чем необходимо.
Установка 64-битной версии Java помогает в этих случаях, непрерывные требования к памяти относятся только к 32-битной Java.
В сочетании с -Xmx512M используйте -d64, чтобы убедиться, что вы используете 64-разрядную виртуальную машину. На 64-битной машине я точно думал, что у меня 64-разрядная виртуальная машина, но нет. После установки 64-битной Java работает опция -d64, а -Xmx позволяет значительно увеличить объем памяти.
java -d64 -Xmx512M mypackage.Test
Я получил ту же ошибку и разрешил это, настроив в run.conf.bat
Запустите JVM с настройкой run.conf.bat в Jboss5x
Если свободная память недоступна AS, которую вы передаете в инструкции, внесите изменения в run.conf.bat
set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m
У меня были похожие проблемы. Я установил 32-битную версию Java на 64-битной машине.
Удалив эту версию и установив 64-битную версию Java. Я был в состоянии решить проблему.
Я знаю, что здесь уже есть много ответов, но ни один из них не помог мне. В конце концов я открыл файл /etc/elasticsearch/jvm.options
и изменил:
-Xms2G
-Xmx2G
отдо
-Xms256M
-Xmx256M
Это решило это для меня. Надеюсь, это поможет кому-то еще здесь.
Предположим, что ваш класс называется Test
в пакете mypackage
. Выполните свой код следующим образом:
java -Xmx1024m mypackage.Test
Это зарезервирует 1024 мегабайта кучи для вашего кода. Если вы хотите 512 МБ, вы можете использовать:
java -Xmx512m mypackage.Test
Используйте мало m в 1024m
, 512m
и т.д.
Иногда эта ошибка указывает на то, что физическая память и своп на сервере полностью используются!
Недавно я видел эту проблему на сервере с 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 запустится правильно, и я смог запустить свое приложение.
(Очевидно, для меня это было всего лишь временным решением, у меня все еще есть выдающаяся задача, чтобы сделать более тщательное рассмотрение процессов, запущенных на этой машине, чтобы увидеть, есть ли что-то, что можно сделать для уменьшения использования номинальной памяти уровней, без необходимости прибегать к остановке приложений.)
Для ошибки ошибка "при инициализации 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.
Обычно его не рекомендуется иметь одинаковый размер для min и max.
Если вы запускаете приложение из eclipse,
Недавно я столкнулся с этой проблемой. У меня есть 3 java-приложения, которые начинаются с размера кучи 1024 или 1280 м. Java просматривает доступное пространство в swap, и если доступной памяти недостаточно, jvm завершает работу.
Чтобы решить эту проблему, мне пришлось закончить несколько программ, на которых было выделено большое количество виртуальной памяти.
Я работал на x86-64 linux с 64-битным jvm.
Предполагая, что у вас достаточно свободной памяти, и вы правильно настроили аргументы JVM, у вас может возникнуть проблема фрагментации памяти. Проверьте максимальную память Java в Windows XP.
Если вы используете 32-битную JVM, размер смены кучи на меньшую, вероятно, поможет. Вы можете сделать это, передав аргументы в java напрямую или через переменные окружения, такие как следующие,
java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"
Для 64-битной JVM должен работать больший размер кучи, например -Xms512M -Xmx1536M
.
Запустите java -version
или java -d32
, java--d64
для Java7, чтобы проверить, какая версия вы используете.
У меня было правильное количество настроек памяти, но для меня он использовал 64-битный intellij с 32-битным jvm. Как только я переключился на 64-битную виртуальную машину, ошибка исчезла.
В любом случае, вот как это исправить: Перейдите в Пуск- > Панель управления- > Система- > Дополнительно (вкладка) → Переменные среды- > Системные переменные- > Новые: Имя переменной: _JAVA_OPTIONS Значение переменной: -Xmx512M
ИЛИ
Измените вызов ant, как показано ниже.
<exec
**<arg value="-J-Xmx512m" />**
</exec>
Это сработало для меня.
Ошибка при инициализации виртуальной машины Не удалось зарезервировать достаточно места для кучи объектов 1572864KB
Я изменил значение памяти в файле settings.grade 1536 - 512, и это помогло
Перейдите на Start-> Управление Panel-> Система-> Дополнительно (вкладка) → Среда Variables-> Система Variables-> Новое:
Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M
Если вы используете 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) и убейте процессы, которые используют выделение памяти и не нужны для вашей операционной системы! = > Попробуйте повторно запустить вашу программу.
В 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 соответствующим образом.
Иногда это относится как
$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2
Если вы установите его на:
$ sysctl vm.overcommit_memory=0
Это должно работать.
Замените -Xmx2G
на -Xms512M
или любой больший объем памяти в файле cassandra.bat в каталоге cassandra bin.
У меня такая же ошибка, и она была решена, когда я удалил временные файлы с помощью% temp% и перезапустил eclipse.
Нет необходимости делать что-либо просто в файле POM, как показано ниже
<configuration>
<maxmemory>1024M</maxmemory>
</configuration>