“Під час ініціалізації ВМ сталася помилка; Не вдалося зарезервувати достатньо місця для купи об’єктів ”за допомогою -Xmx3G


93

Перш за все, у мене є коробка з 8 Гб оперативної пам'яті, тому я сумніваюся, що проблема в загальній пам'яті. Ця програма чудово працює на машинах обсягом 6 Гб або менше.

Я намагаюся зарезервувати 3 ГБ місця за допомогою -Xmx3G у розділі "Аргументи ВМ" у "Конфігураціях запуску" в Eclipse.

Щоразу, коли я намагаюся зарезервувати більше 1500 Мб, я отримую таку помилку: «Помилка сталася під час ініціалізації ВМ; Не вдалося зарезервувати достатньо місця для купи об’єктів ”за допомогою -Xmx3G

Що тут відбувається?


2
Яка версія Java у вас є? На якій операційній системі ви працюєте?
Адам Рофер,

Це був Win7, і у мене було встановлено 3 різні версії Java. Одним із них був 32-розрядний JRE, який використовував Eclipse.
користувач1212731

3
Не забудьте позначити відповідь як правильну.
xdhmoore

Просто змініть налаштування у gridle.property на ваш відповідний простір
Bhushan

Відповіді:


64

Можливо, ви використовуєте 32-розрядний jvm на цій машині?


8
Вибачте за дурне запитання, але як я це перевірити? І як я можу використовувати 64-розрядну версію?
користувач1212731

3
Насправді, я просто спробував java -d64 -version у командному рядку, і він придумав 64-бітну серверну віртуальну машину.
користувач1212731

6
Очевидно, Eclipse використовував 32-розрядну версію JRE, яку я встановив раніше, хоча 64-розрядна версія була останньою. Я змінив налаштування в Налаштування -> Встановлені JRE, щоб вирішити цю проблему. Щиро дякую за Вашу відповідь!
користувач1212731

3
у будь-якому випадку, чи не повинно бути достатньо 32-бітового для адреси 4 Гб?
Томас

7
Має бути, але це вирішує мою проблему. Не підтримайте цю відповідь через відсутність пояснень. Це посилання пояснює, як 32-бітний jvm не може перевищувати 1 Гб простору
Стівен,

58

Ось як це виправити: Перейдіть до 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
Просто примітка для інших. Ви додаєте змінну SYSTEM, а не змінну USER. Я зіткнувся з цією проблемою в Eclipse, і мені не довелося перезавантажувати машину після внесення вищезазначених змін ... Мені довелося лише перезапустити Eclipse. Дякую!
captain_jim1

Для допитливих прапор -Xmx у _JAVA_OPTIONS визначає максимально дозволений розмір купи JVM. Це заважає JVM запитувати нерозумний простір (особливо нерозподіляється суміжно для 32-розрядних машин ...)
varun

41

Це насправді не є специфічною проблемою Eclipse; це загальна проблема Java-на-Windows. Це через те, як JVM розподіляє пам’ять у Windows; він наполягає на виділенні сусіднього фрагмента пам'яті, який часто Windows не може забезпечити, навіть якщо є достатньо окремих фрагментів, щоб задовольнити запит на розподіл. Є утиліти, які намагатимуться допомогти Windows «дефрагментувати» свою пам’ять, що теоретично допомогло б цій ситуації; але я насправді не пробував їх серйозно, тому не можу говорити про їх ефективність. Іноді я чув, що може допомогти, це перезавантажити Windows і, перш ніж запускати будь-які інші програми, запускати програму Java, яка потребує великої частини пам'яті. Якщо вам пощастить, Windows ще не роздробить свій простір пам'яті, і Java отримає суцільний блок, який вимагає.

Десь на веб-сайтах є більше технічних пояснень та аналізів цієї проблеми, але у мене немає корисних посилань.

Однак я знайшов це, що виглядає корисним: https://stackoverflow.com/a/497757/639520


2
У моєму випадку ваша відповідь здається справною. Я не перезапустив вікна, але спробував закрити інші програми у своїх вікнах, а потім запустити java, і він зміг підняти віртуальну машину.
sttaq

22

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

По-друге, коли запускається нова JVM, ця сума підсумовує властивість -Xmx всіх JVM, що працюють, і перевіряє, чи залишається в системі достатньо пам’яті для роботи на їх власний -Xmx, якщо цього недостатньо, то виникає помилка.


15

Я використовував Liferay із сервером Tomcat від eclipse IDE. Я застряг з цією ж помилкою при натисканні на сервер запуску. Двічі клацніть на сервері від eclipse. це відкриє сторінку Огляд сервера. Оновлені аргументи пам'яті від -Xmx1024m -XX: MaxPermSize = 256м до -Xmx512m -XX: MaxPermSize = 256м. Тоді це працювало на мене.



9

Переконайтеся, що 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 це також дозволяє вам фактично "закріпити вкладку", саме тому мені довелося зробити це для власного використання)


Аргумент -vm повинен вказувати на виконуваний файл Java, а не просто на папку. Дивіться wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz

1
Неправильно. Дивіться цю помилку Eclipse: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Адам Рофер

Це справді було питання! Eclipse використовував 32-розрядну версію JRE, яку я колись встановив. Щиро дякую за відповідь і веде мене в правильному напрямку! Я дуже ціную це.
користувач1212731

@AdamRofer, ця помилка цікава, але конкретно про Windows 7 та вирішення проблеми із закріпленням Eclipse на панелі завдань. Загалом eclipse.ini повинен вказувати на виконуваний файл Java, хоча програма запуску Equinox, здається, розумна, оскільки шукатиме виконуваний файл Java, якщо -vm вказує на папку (принаймні в Windows).
E-Riz

@ E-Riz "повинен" занадто суворий на мій смак :) Сподіваємось, вони вирішують помилку, не змінюючи аргумент vm. Ось додаткова інформація, яку було б корисно для них оновити на своїй eclipse.iniсторінці: wiki.eclipse.org/…
Адам Рофер

5

Це питання розміру купи. Відредагуйте .bat(пакетний файл). Можливо, він показує розмір купи 1024. Змініть його на 512 Тоді він повинен працювати.


2

У мене також була та ж проблема під час використання Eclipse, який був 32-бітовим, і використовуваний ним JVM був 64-бітний. Коли я скерував Eclipse до 32-бітної JVM, він спрацював


2

Просто поставте #символ перед org.gradle.jvmargs=-Xmx1536mу gradle.properties

 # org.gradle.jvmargs=-Xmx1536m

Не впевнені, як це працювало під час випробування мультиплатформи Kotlin на Mac OS! як би там не було, дякую!
Чінтан Соні

1

Я знаю, що трохи запізнився, але тут приходить моя відповідь:

Я щойно встановив Інтернет-версію Java від Oracle (а не офлайн-64-розрядну версію).

Після додавання змінної JAVA_HOME ENV вона просто спрацювала!

Сподіваюся, я міг допомогти :)


0

Можливо, ви все одно намагаєтесь помилитися. Я отримав подібну помилку з підтримкою журналу помилок:

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.


0

Однією з причин цієї проблеми є відсутність пам'яті для запуску Tomcat. Спробуйте видалити небажане запущене програмне забезпечення з Windows і перезапустіть eclipse і tomcat.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.