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.
java
memory
memory-management
memory-leaks
profiling
erotsppa
źródło
źródło
-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ń.
Przykład:
Umożliwi to maksymalnie 1 GB pamięci dla maszyny JVM.
źródło
-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
źródło
ulimit
to polecenie systemu Linux? Przeprowadziłem szybkie wyszukiwanie w Google i nie zauważyłem żadnego związku międzyulimit
a JVM. YPowyż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ć.
źródło
Nigdy go nie używałem. Może uznasz to za przydatne.
źródło