„Wystąpił błąd podczas inicjowania maszyny wirtualnej; Nie można zarezerwować wystarczającej ilości miejsca na stertę obiektów ”przy użyciu -Xmx3G


94

Przede wszystkim mam pudełko z 8 GB pamięci RAM, więc wątpię, czy problemem jest całkowita pamięć. Ta aplikacja działa poprawnie na komputerach o pojemności 6 GB lub mniejszej.

Próbuję zarezerwować 3 GB miejsca za pomocą -Xmx3G w sekcji „VM Arguments” w Run Configurations w Eclipse.

Za każdym razem, gdy próbuję zarezerwować więcej niż 1500 MB, pojawia się ten błąd: „Wystąpił błąd podczas inicjowania maszyny wirtualnej; Nie można zarezerwować wystarczającej ilości miejsca na stertę obiektów ”przy użyciu -Xmx3G

Co tu się dzieje?


2
Jaką masz wersję Java? Na jakim systemie operacyjnym używasz?
Adam Rofer

To był Win7 i miałem zainstalowane 3 różne wersje Javy. Jednym z nich był 32-bitowy JRE, z którego korzystał Eclipse.
user1212731

3
Nie zapomnij zaznaczyć odpowiedzi jako poprawnej.
xdhmoore

Po prostu zmień ustawienie w gridle.property z odpowiednią przestrzenią
Bhushan

Odpowiedzi:


64

Czy to możliwe, że używasz 32-bitowego jvm na tym komputerze?


8
Przepraszam za głupie pytanie, ale jak mam to sprawdzić? Jak mogę używać wersji 64-bitowej?
user1212731

3
Właściwie właśnie wypróbowałem java -d64 -version w wierszu poleceń i wymyśliłem 64-bitową maszynę wirtualną serwera.
user1212731

6
Najwyraźniej Eclipse używał 32-bitowej wersji środowiska JRE, którą zainstalowałem wcześniej, mimo że wersja 64-bitowa była najnowszą instalacją. Zmieniłem ustawienia w Preferencjach -> Zainstalowane środowiska JRE, aby rozwiązać ten problem. Bardzo dziękuję za odpowiedź!
user1212731

3
w każdym razie, czy 32 bity nie powinny wystarczyć do zaadresowania 4 GB?
Thomas

7
Powinno być, ale to rozwiązuje mój problem. Nie głosuj za tą odpowiedzią z powodu braku wyjaśnienia. Ten link wyjaśnia, w jaki sposób 32-bitowe jvm nie może przekroczyć 1 GB maksymalnego miejsca na stosie
Steven

58

Oto jak to naprawić: Przejdź do 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;  

Zmień to na odpowiednią ścieżkę .


4
Tylko uwaga dla innych. Dodajesz zmienną SYSTEM, a nie zmienną USER. Napotkałem ten problem w Eclipse i nie musiałem restartować mojego komputera po dokonaniu powyższych zmian ... Musiałem tylko zrestartować Eclipse. Dzięki!
captain_jim1

Dla ciekawskich flaga -Xmx w _JAVA_OPTIONS określa maksymalny dozwolony rozmiar sterty maszyny JVM. Zapobiega to żądaniu przez JVM nieuzasadnionego miejsca (zwłaszcza niemożliwego do przydzielenia ciągłego dla maszyn 32-bitowych ...)
varun

41

W rzeczywistości nie jest to kwestia specyficzna dla Eclipse; jest to ogólny problem dotyczący środowiska Java w systemie Windows. Dzieje się tak z powodu sposobu, w jaki JVM przydziela pamięć w systemie Windows; nalega na przydzielenie ciągłej porcji pamięci, której system Windows często nie może zapewnić, nawet jeśli jest wystarczająco dużo oddzielnych porcji, aby spełnić żądanie alokacji. Istnieją narzędzia, które będą próbowały pomóc systemowi Windows „defragmentować” pamięć, co teoretycznie pomogłoby w tej sytuacji; ale tak naprawdę nie wypróbowałem ich na poważnie, więc nie mogę mówić o ich skuteczności. Słyszałem czasem, że może pomóc zrestartować system Windows i przed uruchomieniem innych aplikacji uruchomić aplikację Java, która wymaga dużej ilości pamięci. Jeśli masz szczęście, system Windows nie podzielił jeszcze przestrzeni pamięci, a Java otrzyma ciągły blok, o który prosi.

Gdzieś w interwebach jest więcej technicznych wyjaśnień i analiz tego problemu, ale nie mam pod ręką żadnych odniesień.

Jednak znalazłem to, co wygląda na pomocne: https://stackoverflow.com/a/497757/639520


2
W moim przypadku twoja odpowiedź wydaje się działać. Nie uruchomiłem ponownie systemu Windows, ale próbowałem zamknąć inne aplikacje w moich oknach, a następnie uruchomić java i był w stanie uruchomić maszynę wirtualną.
sttaq

22

Po pierwsze, 32-bitowe środowisko JRE nie może zużywać więcej ~ 1,5 Gb pamięci RAM. Więc jeśli chcesz więcej, użyj 64-bitowego środowiska JRE.

Po drugie, podczas uruchamiania nowej maszyny JVM sumuje się właściwość -Xmx wszystkich uruchomionych maszyn JVM i sprawdza, czy w systemie jest wystarczająco dużo pamięci, aby można było uruchomić ich własną maszynę -Xmx. Jeśli to nie wystarczy, wystąpi błąd.


15

Używałem Liferay z serwerem Tomcat z eclipse IDE. Utknąłem z tym samym błędem podczas uruchamiania serwera po kliknięciu. Kliknij dwukrotnie serwer z eclipse. otwiera stronę Przegląd serwera. Zaktualizowano argumenty pamięci z -Xmx1024m -XX: MaxPermSize = 256m do -Xmx512m -XX: MaxPermSize = 256m. Wtedy to działało dla mnie.



9

Upewnij się, że Eclipse faktycznie uruchamia tę samą maszynę JVM, o której myślisz, że działa. Jeśli kiedykolwiek korzystasz z języka Java w przeglądarce internetowej, prawdopodobnie masz też wersję 32-bitową, która może mieć pierwszeństwo, jeśli została ostatnio zainstalowana lub zaktualizowana.

Aby mieć absolutną pewność, zalecamy dodanie tych dwóch wierszy do eclipse.inipliku u góry:

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

... gdzie na moim komputerze C:/Java/jdk1.6.0_27/binznajduje się 64-bitowa maszyna JVM, którą znam. Upewnij się, że masz bintam folder.

(Jako bonus, w systemie Windows 7 umożliwia to również „przypięcie karty”, dlatego musiałem to zrobić na własny użytek)


Argument -vm powinien wskazywać na plik wykonywalny Java, a nie tylko na folder. Zobacz wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz

1
Źle. Zobacz ten błąd Eclipse: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam Rofer

To rzeczywiście był problem! Eclipse korzystało z 32-bitowej wersji środowiska JRE, którą kiedyś zainstalowałem. Bardzo dziękuję za odpowiedź i poprowadzenie mnie we właściwym kierunku! Bardzo to doceniam.
user1212731

@AdamRofer, ten błąd jest interesujący, ale szczególnie dotyczy Windows 7 i obejścia problemu z przypinaniem Eclipse do paska zadań. Ogólnie rzecz biorąc, eclipse.ini powinien wskazywać na plik wykonywalny java, chociaż program uruchamiający Equinox wydaje się być inteligentny, ponieważ będzie szukał pliku wykonywalnego Java, jeśli -vm wskazuje na folder (przynajmniej w systemie Windows).
E-Riz

@ E-Riz „powinno” jest zbyt surowe jak na mój gust :) Mam nadzieję, że rozwiążą błąd bez konieczności zmiany argumentu vm. Oto więcej informacji, które dobrze by dla nich zaktualizowały na swojej eclipse.inistronie: wiki.eclipse.org/…
Adam Rofer

5

To jest kwestia rozmiaru sterty. Edytuj swój .bat(plik wsadowy). Może pokazywać rozmiar sterty 1024. Zmień go na 512 Wtedy powinno działać.


2

Miałem również ten sam problem podczas korzystania z Eclipse, który był 32-bitowy, a używana przez niego JVM była 64-bitowa. Kiedy przekierowałem Eclipse do 32-bitowej maszyny JVM, zadziałało


2

Po prostu umieść #symbol przed parametrem org.gradle.jvmargs=-Xmx1536mgradle.properties

 # org.gradle.jvmargs=-Xmx1536m

Nie jestem pewien, jak to działało podczas testowania wieloplatformowego Kotlin w systemie Mac OS! tak czy inaczej, dzięki!
Chintan Soni

1

Wiem, że jestem trochę spóźniony, ale oto moja odpowiedź:

Właśnie zainstalowałem wersję online Java z Oracle (nie wersję offline 64-bitową).

Po dodaniu zmiennej JAVA_HOME ENV po prostu działało!

Mam nadzieję, że mógłbym pomóc :)


0

Prawdopodobnie i tak próbujesz złych opcji. Otrzymałem podobny błąd z obsługą dziennika błędów:

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

W moim przypadku oprogramowanie nie obsługiwało jeszcze javy 8 (skrypt korzystał ze starych argumentów JVM), ale ja domyślnie miałem java 8.


0

Jednym z powodów tego problemu jest brak pamięci dostępnej do uruchomienia Tomcata. Spróbuj usunąć niechciane działające oprogramowanie z systemu Windows i uruchom ponownie zaćmienie i tomcat.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.