rezerwacja pamięci dla Java

0

Nie mogę zarezerwować 1GB pamięci dla Javy, co może być przyczyna?

W cmd:

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

0

Brak dostatecznej ilości pamięci.

0

Czasami brak pamieci ale częściej 32 bitowa Java. Zainstaluj 64-bitową i spróbuj jeszcze raz. XMS na 256 a XMX na 1024 lub nawet wiećej.

0

Przyczyną niezależną od powyższych może być jakiś program w startupie systemu, który intensywnie robi wiele przydziałów pamięci i zwolnień (domyślnie w pamięci fizycznej). Efektem jest zajęcie sporej części fizycznej pamięci systemu, a JVM może przydzielać dla siebie (czyli aplikacji też) wyłącznie ciągłe adresowo bloki pamięci (to z doca do JRE). Na przykład jak ma się 1,5 GB ramu, ale przed uruchomieniem JVM limit użycia pamięci przekroczył 512 MB, to prawie niemożliwe będzie przydzielenie Javie 1 GB ciągłego bloku pamięci (przez -Xms). W 32-bit nie można wiele zdziałać ponieważ część systemów może manewrować adresami wirtualnymi tylko w granicach do 2GB (np. Windows XP 32-bit).
Spróbuj wywalić ze startupu różne quick starty - szczególnie pakietów biurowych i różne indeksery chodzące w tle (np. systemowy lub różnych przeglądarek graficznych). Czasem trzeba uwalić jakąś usługę - zmienić jej typ startu z auto na opóźniony, ręczny lub wyłączony.

ps. Spróbuj odpalić Javę z takimi parametrami: -Xincgc -Xmx1536M -Xms1536M -cp. To często pomaga odpalić Minecrafta, który jest jak na Javę szczególnie dużą kobyłą.

0
Olamagato napisał(a):

Przyczyną niezależną od powyższych może być jakiś program w startupie systemu, który intensywnie robi wiele przydziałów pamięci i zwolnień (domyślnie w pamięci fizycznej). Efektem jest znaczna fragmentacja pamięci systemu, a JVM może przydzielać dla siebie (czyli aplikacji też) wyłącznie ciągłe adresowo bloki pamięci.

Zlituj się, to nie czasy DOSu... Każdy program ma własną niezależną wirtualną przestrzeń adresową, nie widzi innych aplikacji i skutków ich alokacji, dla każdego procesu ten sam adres wirtualny ma inne znaczenie, wskazuje na inne dane. Fragmentacja pamięci fizycznej nie ma nic do rzeczy, translacja adresów pozwala z nieciągłych fragmentów pamięci fizycznej uzyskać ciągły blok wirtualnej, natomiast za fragmentację pamięci wirtualnej w procesie JVM odpowiada wyłącznie JVM.

1

Olamagato:
Istnieje coś takiego jak przestrzeń adresowa fizyczna i przestrzeń adresowa logiczna: http://pl.wikipedia.org/wiki/Stronicowanie_pami%C4%99ci Programy na 32- i 64-bitowe Windowsy/ Linuxy/ etc korzystają z tego i dzięki temu nie trzeba mieć ciągłych fizycznych przestrzeni, bo można sobie pamięć tak zmapować, żeby mieć ciągłą przestrzeń logiczną.

0

Doskonale wiem czym różni się adresowanie logiczne i fizyczne. JVM na takich systemach jak np. Windows żąda bloków pamięci z określonymi flagami i nie akceptuje każdego bloku pamięci jaki jest dostępny (np. NO_DISCARDABLE|READ|WRITE ~ fizyczny RAM). Jeżeli system nie może spełnić takiego żądania, to JVM dostaje właśnie takie komunikaty jak u autora tematu powyżej. Sam miałem takie problemy ponieważ używałem systemu z 2,25 GB w którym wywaliłem plik swapu. I też nie mogłem zalokować głupiego 1 giga - teoretycznie bezproblemowego. Pomogło dopiero posprzątanie w startupach i usługach. Sporo może mieszać antywirus. Miałem takiego, który zgarniał prawie 300MB nieusuwalnej pamięci do zapisu i odczytu na swoją bazę markerów. Uwaga - niektóre potrafią pakować JRE do sandboxa i wtedy niby wszystko jest ok, a brakuje pamięci lub wszystko się sypie).

0

Sprawdź ulimit jeśli korzystasz z Linuksa.

0
lipkerson napisał(a):

Czasami brak pamieci ale częściej 32 bitowa Java. Zainstaluj 64-bitową i spróbuj jeszcze raz. XMS na 256 a XMX na 1024 lub nawet wiećej.

Zainstalować 64bit pomimo, że mam system Windows Xp 32 bit?

Jeśli mam zużycie RAMu na poziomie 1Gb czy 2GB to nie mogę przydzielić na Javę więcej niż 880M - w żadnym wypadku. W sumie mam 3GB.

java -Xincgc -Xmx1536M -Xms1536M -cp -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

0

Przeanalizuj co siedzi u Ciebie w pamięci, ja mam XP javę 32, 2GB RAM-u i bez problemu mogę przydzielić 1GB dla JVM.

0
falkon napisał(a):

Jeśli mam zużycie RAMu na poziomie 1Gb czy 2GB to nie mogę przydzielić na Javę więcej niż 880M - w żadnym wypadku. W sumie mam 3GB.

java -Xincgc -Xmx1536M -Xms1536M -cp -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Na co idzie Ci aż 1-2 GB? To nie jest problem z Javą, ale z systemem.

Dla przydzielenia Javie 1 GB potrzebujesz 1 GB ramu fizycznego - najlepiej jeszcze nie dotkniętego (nie zwróconego czy przeżutego:).
Wciśnij ctrl+alt+del (menedżer zadań) i podaj wszystkie wartości z zakładki wydajność.
Jeżeli chodzi o parametry pamięciowe powyżej, to zmniejsz sobie obie wartości do 1023M. Chociaż to raczej nic nie da jeżeli tylko 880 MB wolnej fizycznej masz dostępne.

0

Zużycie zaraz po starcie winXp: http://pokazywarka.pl/or6atk/

0

Z tych danych wynika, że nie powinieneś mieć żadnych problemów z pamięcią dla Javy. Jednak, żeby się o tym przekonać usuń wszystkie pliki wymiany (swap file) w tym systemie ponieważ są one i tak kompletnie zbędne lub jeżeli jakikolwiek program na sztywno sprawdza ich istnienie i nie chce się uruchomić (tak mają niektóre gry i programy graficzne), to pozostaw jeden i zmniejsz go do minimum (1 lub 8 MB - nie pamiętam dla XP). Wtedy cała pamięć wirtualna będzie leżeć w fizycznej, więc pamięć buforowana nie będzie mieszać.
Jeżeli to nie zadziała, to odpal msconfig i wyłącz dosłownie wszystko z autostartu. Wtedy ponownie spróbuj.
A jeszcze coś - z zaawansowanych ustawień systemu z zakładki wydajność wywal zrzut pamięci oraz automatyczny restart - ta pierwsza rzecz woła właśnie o plik wymiany. Kiedy zrzutu nie ma, to system nie widzi już potrzeby jego istnienia (nie dotyczy to programów).

0

Gdzie wyłączyć swap file o którym piszesz? Resztę próbowałem, nie pomogło.

0

Jeżeli masz "Mój komputer" na pulpicie, jeżeli nie, to znajdź go w eksplorerze lub menu start. Wtedy na nim PPM i właściwości: Właściwości systemu/Zaawansowane/Wydajność. Dalej nie pamiętam bo XP rzadziej już używam. Na każdej z partycji ustaw "bez pliku stronicowania", tak żeby łączny rozmiar wyniósł 0 (1 lub 8MB na C: gdy jakiś program będzie się o nią pluł).

0

Niestety nie pomogło, jak dla mnie magia.

0

Odpal windę w trybie awaryjnym i ponownie sprawdź. Na wszelki wypadek, żeby upewnić się co do aplikacji możesz sprawdzić próbując odpalić Minecrafta (nawet jeżeli w to nigdy nie grałeś) - tak dla testu. Możesz też sprawdzić w drugą stronę - odpal sobie jakieś Hello World z wywołaniem javy -Xms1024m jub większym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1