2009-10-14 19 views
211

Pracuję na serwerze Windows 2003 (64-bitowym) z 8 GB pamięci RAM. Jak mogę maksymalnie zwiększyć pamięć sterty? Używam flagi -Xmx1500m, aby zwiększyć rozmiar sterty do 1500 Mb. Czy mogę zwiększyć pamięć sterty do 75% pamięci fizycznej (stert 6 GB)?Zwiększ rozmiar sterty w Javie

+2

Zakładam, że próbowałeś zwiększyć stertę, ale się nie udało? Czy używasz 64-bitowej maszyny JVM? –

+2

Czy próbowałeś '-Xmx6g'? Czy to nie zadziałało? Co zaobserwowałeś? –

+0

Dzięki za komentarz, ale to nie działa – Sunil

Odpowiedz

265

Można zwiększyć do 4 GB w systemie 32-bitowym. Jeśli korzystasz z systemu 64-bitowego, możesz przejść wyżej. Nie musisz się martwić, jeśli wybrałeś nieprawidłowo, jeśli poprosisz o 5g w 32-bitowym systemie, java złoży skargę na nieprawidłową wartość i zakończy działanie.

Jak napisali inni, użyj flag linii-cmd - np.

java -Xmx6g myprogram 

Możesz uzyskać pełną listę (lub prawie pełną listę, mimo to), wpisując java -X.

+16

Z mojego doświadczenia wynika, że ​​faktyczny rozmiar sterty Java akceptuje użycie maszyny wirtualnej 32b (w systemie 32b lub 64b - VM jest ważną częścią, tutaj), wynosi około 2G. Również zaskoczony Pytający nie pierwszy wyszukiwania i znaleźć: http://stackoverflow.com/questions/1596009/java-lang-outofmemoryerror-java-heap-space oraz: http://stackoverflow.com/ pytania/37335/how-to-deal-with-java-lang-outofmemoryerror-java-heap-space-error-64mb-heap-s – wsorenson

+2

ah, masz rację oczywiście - w systemie 32-bitowym możesz tylko adresować 2 GB pamięci. –

+0

Czy jest konieczne, aby maksymalna ilość sterty i minimalna wielkość sterty były takie same? – user1747935

5

Czy mogę zwiększyć pamięć sterty do 75% pamięci fizycznej (6GB sterty).

Tak, można. W rzeczywistości, jeśli chcesz, możesz zwiększyć do więcej niż ilość pamięci fizycznej.

To, czy warto to zrobić, zależy od tego, ile jeszcze działa system. W szczególności, jeśli "zestaw roboczy" aplikacji i usług, które obecnie działają znacznie przekracza dostępną pamięć fizyczną, system jest podatny na "thrash", spędzając dużo czasu na przenoszeniu stron pamięci wirtualnej do iz dysku. Efektem sieci jest to, że system staje się strasznie wolny.

+0

Dzięki za komentarz Ale jak mogę zwiększyć.Plz możesz dać polecenie. – Sunil

+0

Wypróbuj -Xmx6000m. Powinien działać, jeśli używasz 64-bitowej wersji Java. –

+0

Niestety, wciąż nie działa – Sunil

25

W przypadku 32-bitowej maszyny JVM największy teoretycznie ustawiony rozmiar sterty to 4 gb. Aby użyć większego rozmiaru sterty, musisz użyć 64-bitowej maszyny JVM. Spróbuj wykonać następujące czynności:

java -Xmx6144M -d64

-d64 flaga jest ważne, jak to mówi JVM do uruchomienia w trybie 64-bitowym.

+0

Dziękuję szefowi, ale to nie działa w moim systemie. Jest jeszcze coś, czego mi brakuje. – Sunil

+3

Zdefiniuj "nie działa". Czy to się nie uruchamia i daje błąd? Czy zaczyna się, ale używa innego sterty wielkości? – Kevin

139

Jest możliwe, aby zwiększyć wielkość sterty przydzielonego przez JVM za pomocą opcji wiersza poleceń Tu mamy 3 opcje

-Xms<size>  set initial Java heap size 
-Xmx<size>  set maximum Java heap size 
-Xss<size>  set java thread stack size 

java -Xms16m -Xmx64m ClassName 

W powyższej linii możemy ustawić minimalny sterty do 16MB i maksymalny sterty 64MB

9

jest możliwe, aby zwiększyć wielkość sterty przydzielonego przez JVM Eclipse bezpośrednio w Eclipse IDE goto

Run Run Konfiguracje ----> ----> Argumenty

Wejście -Xmx1g (jest on stosowany, aby ustawić maksymalną wielkość jak Xmx256m lub Xmx1g ...... M -> MB g ---> gb)

+3

Wystarczy dodać argument VM (Eclipse daje dwie opcje). –

8

Java -d64 -Xms512m -Xmx4g HelloWorld

gdzie -d64: pozwoli na 64-bitowej JVM -Xms512m: Ustawia początkowy rozmiar sterty jako 512 MB -Xmx4g: Ustawia maksymalny rozmiar sterty jako 4 GB (tutaj nazwa pliku Java jest: HelloWorld.java)

0

Działa to tylko z 64-bitową wersją Java. Przejdź do Panelu sterowania i kliknij ikonę Java.W małym oknie Java Control Panel kliknij pasek menu Java, a następnie kliknij przycisk view.

Jeśli masz dwie platformy Java, wyłącz poprzednią wersję Java, a następnie kliknij na pole tekstowe Parametry środowiska wykonawczego i wpisz -Xmx1024m lub mniej niż rozmiar pamięci RAM. Nie zwiększaj wielkości sterty równej RAM, w przeciwnym razie Twój system ulegnie awarii.

+3

do oddania głosu ?? dla tej odpowiedzi? – madhairsilence

1

zmienić wielkość sterty do 6GB

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m" 
+0

Jeśli mam pamięć 8G w moim systemie i widzę od menedżera zadań, że 70% z tego jest w użyciu; czy jest możliwe przydzielenie pamięci 6G do rozmiaru sterty java? –

0

Tak proszę skorzystać z poniższego polecenia. Możesz.

Możesz zwiększyć pamięć sterty do 75% pamięci fizycznej (6 GB Sterty) lub wyższej.

Ponieważ używasz opcji 64-bitowych, możesz zwiększyć rozmiar sterty do żądanej ilości. W przypadku korzystania z 32-bitowej karty jest ograniczona do 4 GB.

$ java -Xms512m -Xmx6144m JavaApplication 

ustawia cię z początkowej wielkości sterty do 512 i maksymalny heapsize do 6GB.

nadzieję, że pomoże .. :)

+0

Wydaje się to bardzo podobne do dwóch najczęściej głosowanych odpowiedzi opublikowanych kilka lat wcześniej. – Dukeling

1

Kilka osób wskazał konkretne odpowiedzi na wielkość sterty z opcji JVM z -Xms i -Xms. Chcę zauważyć, że nie jest to jedyny typ opcji pamięci dla jvm. W szczególności, jeśli otrzymujesz stos na przepływie, powinieneś zwiększyć rozmiar stosu, dodając dodatkową opcję, taką jak -Xss8m.

Dla tego problemu rozwiązaniem mogłyby być opcje jvm o parametrach takich jak -Xms2g -Xmx6g -Xss8m.

Udostępniam te informacje, ponieważ moje wyszukiwanie w Google, w jaki sposób zwiększyć pamięć jvm, zabrało mnie do tego rozwiązania, a rozwiązania nie działały z dużą ilością alokacji pamięci. Kiedy zorientowałem się, jakie są konkretne ustawienia, byłem w stanie dowiedzieć się, jak zwiększyć rozmiar stosu i znaleźć brakujący parametr. :) Mam nadzieję, że to zaoszczędzi innym czasu, ponieważ zaoszczędziłoby mi to mnóstwo czasu. :)

2

Można zwiększyć wielkość sterty przekazując JVM parametry -Xms i -Xmx jak poniżej:

Dla Jar pliki:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar 

Pliki Java:

java -Xms4096M -Xmx6144M ClassName 

Powyższe parametry zwiększają InitialHeapSize (-Xms) do 4 GB (4096 MB) i MaxHeapSize (-Xmx) do 6 GB (6144 MB).

Ale, Młoda generacja Heap Size pozostanie taka sama, a dodatkowa HeapSize zostanie dodany do Old Generation Heap Size. Aby uzyskać wyrównać rozmiar Young Gen Heap i Old Gen Heap, użyj -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar 

-XX: NewRatio = Old Gen Heap Size: Młody Gen HeapSize (Można grać z tym stosunek do uzyskania wymaganego współczynnika).

Powiązane problemy