"Ошибка при инициализации VM: не удалось зарезервировать достаточно места для кучи объекта" с использованием -Xmx3G

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

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

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

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

Ответ 1

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

Ответ 2

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

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

Я действительно нашел это, что выглядит полезным: fooobar.com/questions/6773/...

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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 (script использовал старые аргументы JVM), но по умолчанию у меня был java 8.

Ответ 10

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