«Произошла ошибка при инициализации ВМ;Не удалось зарезервировать достаточно места для кучи объектов »с помощью -Xmx3G - PullRequest
78 голосов
/ 16 февраля 2012

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

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

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

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

Ответы [ 10 ]

60 голосов
/ 16 февраля 2012

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

52 голосов
/ 07 мая 2015

Вот как это исправить: Перейдите на 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;  

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

39 голосов
/ 16 февраля 2012

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

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

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

20 голосов
/ 26 июня 2012

Во-первых, JRE 32 бит не может использовать больше ~ 1,5 Гб оперативной памяти. Так что, если вы хотите больше, используйте 64-битную JRE.

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

15 голосов
/ 24 декабря 2013

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

8 голосов
/ 16 февраля 2012

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

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

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

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

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

4 голосов
/ 12 октября 2012

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

2 голосов
/ 11 августа 2014

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

0 голосов
/ 25 декабря 2015

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

0 голосов
/ 15 января 2015

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

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 по умолчанию.

...