2011-07-10 15 views
21

Po prostu w obliczu dziwnego problemu. Po wpisaniuNie można zarezerwować wystarczającej ilości miejsca na stertę obiektów, aby uruchomić JVM

java -version 

mam

Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Could not create the Java virtual machine. 

.

java -Xms64m -Xmx64m -version 

Komenda ta działa dobrze

java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07) 
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode) 

jeśli zmienię XMS, xmx do 128M, znowu się błąd.

Korzystanie z polecenia top i free -m Widzę, że mam ponad 192 mb za darmo, więc dlaczego nadal otrzymuję ten błąd?

Mem: 262144k total, 64760k used, 197384k free,  0k buffers 
Swap:  0k total,  0k used,  0k free,  0k cached 

Dziękuję

+0

Nagle miałem ten problem dzisiaj - okazało się, że przeszedłem na OpenJDK JRE 7. Normalnie używam Oracle JDK 8, który nie pokazuje tego problemu - przynajmniej nie z małą liczbą maszyn wirtualnych. –

Odpowiedz

11

Wygląda maszyny, którą próbujesz uruchomić na to ma tylko 256 MB pamięci.

Może JVM próbuje przydzielić duży, ciągły blok 64 MB pamięci. 192 MB, które masz za darmo, może zostać podzielone na mniejsze części, więc nie ma przylegającego bloku 64 MB do przydzielenia.

Spróbuj uruchomić program Java z mniejszego rozmiaru sterty, na przykład:

java -Xms16m ... 
+0

Tak, mój komputer ma tylko 256 MB, z opcją -Xms16m i -Xms64m działa dobrze. Ale 64 to za mało dla moich potrzeb. Czy można to jakoś naprawić, więc mogę użyć 128 MB? – user12384512

+0

Zwróć uwagę, że '-Xms' ustawia początkowy rozmiar sterty (' -Xmx' ustawia maksymalny rozmiar sterty). Czy twój program naprawdę potrzebuje ** początkowego ** sterty o wielkości 64 MB? Dlaczego nie pozwolić maszynie JVM automatycznie ją powiększyć? – Jesper

+0

Tak, wiem. Ale to naprawdę nie ma znaczenia. Ponieważ java -Xms16m -Xmx128m -version również się nie powiodło – user12384512

5

Według this post ten błąd oznacza:

rozmiar Heap jest większa niż fizycznej pamięci komputera.

Edycja: Kupa nie jest jedyną pamięcią zarezerwowaną, jak przypuszczam. Przynajmniej są inne ustawienia maszyny JVM, takie jak PermGenSpace, które proszą o pamięć. Przy wielkości sterty 128M i PermGenSpace 64M już wypełniasz dostępne miejsce.

Dlaczego nie zmniejszyć rozmiaru innych ustawień pamięci, aby zwolnić miejsce na stercie?

12

Miałem ten sam problem podczas korzystania z 32-bitowej wersji java w środowisku 64-bitowym. Podczas korzystania z 64 java w 64 OS było OK.

+0

Mam ten sam problem. Używanie 32-bitowej Java w systemie 64-bitowym. Począwszy od Xmx1024 spowodował powyższy błąd. Począwszy od Xmx512 działa dobrze! – T3rm1

+0

Miałem ten sam problem. Używałem 32-bitowego JRE na moim 64-bitowym komputerze.Zmieniłem system JRE na 64-bitowy i mój problem został rozwiązany. – Devrim

Powiązane problemy