«Ошибка при инициализации VM; Не удалось зарезервировать достаточно места для кучи объектов “, используя -Xmx3G

Прежде всего, у меня есть коробка с 8 ГБ оперативной памяти, поэтому я сомневаюсь, что проблема с памятью. Это приложение работает отлично на машинах с 6 ГБ или меньше.

Я пытаюсь зарезервировать 3 ГБ пространства, используя -Xmx3G в разделе «Аргументы VM» в «Запуск конфигурации в Eclipse».

Каждый раз, когда я пытаюсь зарезервировать более 1500 МБ, я получаю эту ошибку: «Ошибка при инициализации виртуальной машины; Не удалось зарезервировать достаточно места для кучи объектов “, используя -Xmx3G

Что здесь происходит?

Может быть, вы используете 32-битный jvm на этой машине?

Вот как это исправить: перейдите в Start->Control Panel->System->Advanced(tab)->Environment Variables->System

 Variables->New: Variable name: _JAVA_OPTIONS Variable value: -Xmx512M Variable name: Path Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin; 

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

На самом деле это не проблема, связанная с Eclipse; это общая проблема Java-on-Windows. Это из-за того, как JVM выделяет память на Windows; он настаивает на распределении непрерывного fragmentа памяти, который часто не может предоставить Windows, даже если для удовлетворения запроса на распределение имеется достаточно отдельных fragmentов. Есть утилиты, которые попытаются помочь Windows «деfragmentировать» свою память, что теоретически поможет в этой ситуации; но я действительно не пробовал их всерьез, поэтому не могу говорить об их эффективности. Одна вещь, которую я слышал иногда, которая может помочь, – перезагрузить Windows и, прежде чем запускать какие-либо другие приложения, запустите Java-приложение, которое нуждается в большой части памяти. Если вам повезет, Windows еще не будет fragmentировать свое пространство памяти, а Java получит непрерывный блок, который запрашивает.

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

Однако я нашел это, что выглядит полезным: https://stackoverflow.com/a/497757/639520

Сначала JRE 32 бит не может использовать больше ~ 1.5 ГБ RAM. Поэтому, если вы хотите больше, используйте 64-битную JRE.

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

Я использовал Liferay с сервером Tomcat из Eclipse IDE. Я застрял в этой же ошибке при щелчке по запуску сервера. Дважды щелкните по серверу из eclipse. он откроет страницу Обзор сервера. Обновленные аргументы памяти от -Xmx1024m -XX: MaxPermSize = от 256 до -Xmx512m -XX: MaxPermSize = 256 м. Тогда он работал на меня.

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

Чтобы быть абсолютно уверенным, я рекомендую добавить эти две строки в ваш файл eclipse.ini вверху:

 -vm C:/Java/jdk1.6.0_27/bin 

… где на моей машине C:/Java/jdk1.6.0_27/bin где находится JVM, я знаю, 64-битный. Обязательно наличие папки bin .

(В качестве бонуса в Windows 7 это также позволяет вам «привязать вкладку», поэтому я должен был сделать это для собственного использования)

Это вопрос размера кучи. Измените свой .bat (пакетный файл). Он может показывать размер кучи 1024. Измените его на 512. Тогда он должен работать.

У меня также была та же проблема при использовании Eclipse, которая была 32 бит, а JVM, используемая ею, была 64 бит. Когда я направил Eclipse на 32-разрядную JVM, тогда он работал

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

 Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0 Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0 

В моем случае программное обеспечение еще не поддерживало java 8 (сценарий использовал старые аргументы JVM), но по умолчанию у меня был java 8.

Одной из причин этой проблемы является отсутствие памяти для Tomcat. Попробуйте удалить ненужное запущенное программное обеспечение из окон и перезапустить eclipse и tomcat.

  • Как получить аргументы vm из java-приложения?
  • Что на самом деле делает флаг JVM CMSClassUnloadingEnabled?
  • CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabled
  • Каков максимальный размер кучи с 64-битной JVM?
  • Как увеличить лимит памяти IDE в IntelliJ IDEA на Mac?
  • Запуск java с переменной JAVA_OPTS env
  • Interesting Posts

    Глубокое копирование NSArray

    Сделайте жесткую ссылку без дополнительных программ в Windows 7

    Тусклый экран минус минимум на Ubuntu

    Терминал, который поддерживает курсивный код выхода ANSI?

    Спящий / спящий режим Подтверждение экрана спящего / спящего режима?

    Facebook Open Graph не очищает кеш

    Могу ли я установить память 1333 МГц на ноутбук с памятью до 1066 МГц?

    Разделить временные ряды данных на временные интервалы (скажем, час), а затем построить график

    Сбой графической карты, все, что я мог попробовать

    Практичный (ближе к классическому Linux) способ использовать (автоматизировать) SUDO для CygWin

    Как-то зарегистрировать мои classы в списке

    Какое программное обеспечение следует использовать для шифрования моего жесткого диска?

    Правильность алгоритма Сакамото, чтобы найти день недели

    Пазл, связанный с вложенными циклами

    Как вы можете делать пейджинг с NHibernate?

    Давайте будем гением компьютера.