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

Для будущих Googlers (и Bingers), вот некоторый код для расширения структуры. Этот пример превращает значение в тип double .

  public static class ExtensionMethods {public static double ToDouble & lt; T & gt; (это значение T), где T: struct {return  Convert.ToDouble (значение);  }}  

После этого вы можете использовать ToDouble () , как вы используете ToString () . Будьте осторожны с элементами конверсии, такими как переполнение.

226
задан Qantas 94 Heavy 3 November 2013 в 10:36
поделиться

25 ответов

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

177
ответ дан Bozho 16 August 2018 в 02:15
поделиться
  • 1
    Или короче, -mx256m или -mx512m;) – Peter Lawrey 9 December 2010 в 20:55
  • 2
    Is -mx то же самое, что и -Xmx и -XX: MaxHeapSize? – Erty Seidohl 20 August 2012 в 19:57
  • 3
    Спасибо .. получается слишком большой номер может также быть проблемой и может дать ту же ошибку! – Dinesh Rajan 4 September 2014 в 00:00
  • 4
    Кто-нибудь нашел решение, которое фактически работает в 100% случаев? Это решение решает проблему временно, но затем внезапно возвращается. У меня 16 ГБ, и я устал от этого sh * t. В прежние времена все было лучше: [ – Nilzor 1 October 2014 в 14:06
  • 5
    Не работает для меня в Windows 8 с x86 или x64 Java. – AndrewSmiley 27 July 2015 в 13:13

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

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

Variables-> New: Имя переменной: _JAVA_OPTIONS

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

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

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

39
ответ дан Ajay 16 August 2018 в 02:15
поделиться

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

java -d64 -Xmx512M mypackage.Test
20
ответ дан Axl 16 August 2018 в 02:15
поделиться
  • 1
    Этот ответ должен быть наверху. Провел два месяца, сражаясь с этой проблемой, просто осознав, что установка 64-разрядной Java решила проблему (опция -d64 в моем случае не нужна) – Nilzor 27 October 2014 в 15:16
  • 2
    Поднято _JAVA_OPTIONS: -d64 -Xmx1024M Нераспознанная опция: -d64 Не удалось запустить JVM. Максимальный размер кучи (-Xmx) может быть слишком большим или инструмент антивируса или брандмауэра может блокировать выполнение. – Alexander 15 June 2018 в 09:30

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

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

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

2
ответ дан codeDr 16 August 2018 в 02:15
поделиться

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

2
ответ дан Community 16 August 2018 в 02:15
поделиться

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

-Xms1536m -Xmx1536m

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

-Xms1336m -Xmx1336m
114
ответ дан djangofan 16 August 2018 в 02:15
поделиться
  • 1
    Я забыл упомянуть, что эта проблема возникла бы при запуске в 32-битной командной оболочке. У этой 64-разрядной командной оболочки может не быть этой проблемы. – djangofan 10 September 2012 в 04:37

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

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

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

0
ответ дан Fico 16 August 2018 в 02:15
поделиться

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

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

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

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

0
ответ дан h--n 16 August 2018 в 02:15
поделиться

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

. Я изменил значение памяти в файлах настроек с расширением. 15: 15: 512. Это помогло

1
ответ дан Haris Durrani 16 August 2018 в 02:15
поделиться

Не нужно ничего менять только в файле POM, как показано ниже

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>
-3
ответ дан hyde 16 August 2018 в 02:15
поделиться

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

40
ответ дан Jens Timmerman 16 August 2018 в 02:15
поделиться
  • 1
    +1 для указания _JAVA_OPTIONS - в моем случае java вызывается откуда-то глубоко внутри скрипта оболочки, для которого у меня нет доступа на запись, поэтому этот параметр предпочтительнее. – gerrit 15 May 2015 в 09:50
  • 2
    Тоже самое. Я использую университетские компьютеры, поэтому я не администратор (не могу изменить переменные окружения), а параметр командной строки вообще не работает. Спасибо! – Kimbluey 11 February 2017 в 04:23

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

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

18
ответ дан JohnEye 16 August 2018 в 02:15
поделиться
  • 1
    Я думаю, что это лучший ответ, если вы продолжаете получать ошибку после использования опции -Xmx [bignumber] m. Помогло мне правильно управлять Apache jMeter. – RuudvK 10 April 2018 в 13:18
  • 2

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

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

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

6
ответ дан Jon Schneider 16 August 2018 в 02:15
поделиться
  • 1
    То же самое здесь, java -version не удалось, хотя верх показал еще немного свободного: | (также говорилось, что произошла ошибка при инициализации VM. Не удалось зарезервировать достаточно места для массива маркировки карт). Похоже, что исправление было запущено, посмотрите, какие процессы использовали большую RAM (колонка VIRT), убить их [postgres, appdynamics для меня]: | – rogerdpack 24 October 2016 в 22:37

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

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

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

$ sysctl vm.overcommit_memory=0

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

0
ответ дан kay 16 August 2018 в 02:15
поделиться

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

0
ответ дан kiran 16 August 2018 в 02:15
поделиться

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

-Xms2G
-Xmx2G

на

-Xms256M
-Xmx256M

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

6
ответ дан kramer65 16 August 2018 в 02:15
поделиться

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

4
ответ дан Manu Sharma 16 August 2018 в 02:15
поделиться

В 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.

0
ответ дан Mogsdad 16 August 2018 в 02:15
поделиться

Ошибка:

Для ошибки «ошибка при инициализации 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.

Разрешение:

  • Увеличить размер кучи. Чтобы увеличить размер кучи,
  • перейти -> jboss-eap-6.2 \ bin \ standalone.conf.bat или jboss-eap-6.2 \ bin \ standalone.conf
  • изменить - > JAVA_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m", где -Xms - минимальный размер кучи, а -Xmx - максимальный размер кучи.
  • Обычно его не рекомендуется иметь одинаковый размер для min и max.
  • Если вы используете приложение из eclipse,
  • Дважды щелкните по серверу
  • , выберите «открыть конфигурацию запуска», вы будете перенаправлены в окно «Изменить
  • В аргументах VM определите размер кучи, как указано ниже
  • .
  • В этом случае вы переходите к вкладке «(x) =« Аргументы ».
  • ] "- Dprogram.name = JBossTools: JBoss EAP 6.1+ Runtime Server" -сервер -Xms256m -Xmx512m -XX: MaxPermSize = 256m -Dorg.jboss.resolver.warning = true
6
ответ дан Prabhakar 16 August 2018 в 02:15
поделиться

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

java -Xmx1024m mypackage.Test

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

java -Xmx512m mypackage.Test

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

5
ответ дан Sirex 16 August 2018 в 02:15
поделиться

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

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

0
ответ дан smoka 16 August 2018 в 02:15
поделиться

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

ИЛИ

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

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

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

1
ответ дан Sudhakar 16 August 2018 в 02:15
поделиться

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

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

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

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m
13
ответ дан Tom van der Woerdt 16 August 2018 в 02:15
поделиться

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

0
ответ дан Viswanath Nuggu 16 August 2018 в 02:15
поделиться

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

2
ответ дан vsingh 16 August 2018 в 02:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: