Chcę ograniczyć maksymalną ilość pamięci używanej przez maszynę JVM. Uwaga, to nie tylko sterta, chcę ograniczyć całkowitą pamięć używaną przez ten proces.
Odpowiedzi:
użyj argumentów -Xms<memory>
-Xmx<memory>
. Użyj M
lub G
po liczbach do wskazania odpowiednio Megs i Gigabitów bajtów. -Xms
wskazuje minimum i -Xmx
maksimum.
-Xmx524M
i proces zajmuje 1,2 GB pamięci RAM. (?)
Nie powinieneś martwić się o wyciek pamięci ze stosu (jest to bardzo rzadkie). Jedyny przypadek, w którym stos wymknie się spod kontroli, to nieskończona (lub naprawdę głęboka) rekurencja.
To tylko kupa. Przepraszamy, na początku nie przeczytałem w pełni Twojego pytania.
Należy uruchomić maszynę JVM z następującym argumentem wiersza poleceń.
-Xmx<ammount of memory>
Przykład:
-Xmx1024m
Umożliwi to maksymalnie 1 GB pamięci dla maszyny JVM.
-XX:MaxDirectMemorySize
. Nie żebym mocno profilował, ale nadal;)
MaxDirectMemorySize
Jedyny wpływa na bufory NIO. Maszyna JVM używa wszelkiego rodzaju innej pamięci natywnej.
Jeśli chcesz ograniczyć pamięć dla jvm (nie rozmiar sterty), ulimit -v
Aby dowiedzieć się, jaka jest różnica między pamięcią jvm i sterty, zapoznaj się z tym doskonałym artykułem http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- java-process.html
ulimit
to polecenie systemu Linux? Przeprowadziłem szybkie wyszukiwanie w Google i nie zauważyłem żadnego związku między ulimit
a JVM. Y
Powyższa odpowiedź jest w pewnym sensie poprawna, nie można z wdziękiem kontrolować, ile pamięci natywnej przydziela proces Java. To zależy od tego, co robi Twoja aplikacja.
To powiedziawszy, w zależności od platformy, możesz użyć jakiegoś mechanizmu, na przykład ulimit, aby ograniczyć rozmiar javy lub innego procesu.
Po prostu nie oczekuj, że zawiedzie z wdziękiem, jeśli osiągnie ten limit. Błędy alokacji pamięci natywnej są znacznie trudniejsze do obsłużenia niż awarie alokacji na stercie java. Istnieje dość duża szansa, że aplikacja ulegnie awarii, ale w zależności od tego, jak ważne jest dla systemu, aby zmniejszyć rozmiar procesu, który nadal może Ci odpowiadać.
NativeHeap można zwiększyć o -XX: MaxDirectMemorySize = 256M (domyślnie 128)
Nigdy go nie używałem. Może uznasz to za przydatne.