Jak dokładnie JVM określa, czy powinien to być Garbage Collector? Czy istnieje sposób ograniczenia JVM, aby nie wywoływać GC?Ograniczanie JVM, aby nie wywoływać GC
Odpowiedz
Nie można powiedzieć JVM, aby nie wywoływała GC, ale można nakazać JVM, aby ignorowała połączenia z numerem System.gc()
przez -XX:+DisableExplicitGC
.
Zazwyczaj JVM decyduje się uruchomić cykl zbierania śmieci, gdy jeden z obszarów sterty bliski jest wypełnienia. Zauważ, że ostatecznie decyzja należy do JVM.
Aby instruować JVM, aby nie wykonywała GC przez jakiś czas, nie ma niezawodnego i przenośnego sposobu, aby to zrobić (oprócz unikania alokacji sterty w ogóle).
Jeśli próbujesz zminimalizować przerwy w GC, książka Java Performance ma dobry materiał.
Jak dokładnie JVM ustala, czy powinien to być Garbage Collector?
To zależy.
Jeśli używasz kolektor przeładunkową, a następnie uruchamia JVM GC, gdy nie może przydzielić nowy obiekt w przestrzeni (lub w jednym z pomieszczeń), gdzie musi zostać przydzielone.
Jeśli korzystasz z kolektora o niskiej pauzie, wówczas JVM wyzwala GC, gdy stosunek wolnej przestrzeni spadnie poniżej konfigurowalnego poziomu.
Czy istnieje jakiś sposób, aby ograniczyć JVM nie powołać GC?
Nie. Jeśli JVM zdecyduje, że musi uruchomić GC, uruchomi go. Jedyne, co możesz zrobić, to powiedzieć JVM, aby ignorowała wywołania kodu aplikacji do System.gc()
.
To naprawdę zależy od implementacji maszyny wirtualnej.
W innej strony:
Jawne wnioski o wywóz śmieci są wodzirej wskazujące prawdopodobne problemy z wydajnością.
Code Correctness: Call to System.gc()
apeluje do
System.gc()
,Runtime.getRuntime().gc()
iSystem.runFinalization()
nie są zalecane. Kod powinien zachowywać się tak samo, niezależnie od tego, czy usuwanie śmieci jest wyłączone przy użyciu opcji-Xdisableexplicitgc
, czy też nie. Co więcej, "nowoczesne" jvms wykonują bardzo dobrą robotę przy zbieraniu śmieci. Jeśli problemy z używaniem pamięci niezwiązane z wyciekami pamięci pojawiają się w aplikacji, powinny być rozpatrywane w opcjach JVM, a nie w samym kodzie.
Generalnie GC działa tylko wtedy, kiedy musi. Wyjątkiem, współbieżne przeciąganie znaczników rozpocznie się przedwcześnie, aby uniknąć konieczności zatrzymania aplikacji.
IMHO, Najprostszym/najlepszym rozwiązaniem jest nie tworzyć tak dużo śmieci. Możesz użyć profilera pamięci, aby zmniejszyć ilość śmieci, które produkujesz. Pozwoli to zmniejszyć rozmiar Twoich kolekcji i częstotliwość ich występowania. W skrajnych przypadkach można uniknąć zbierania w ciągu dnia lub nawet przez cały tydzień.
Zaletą zmniejszania ilości śmieci jest zmniejszenie ilości pamięci podręcznej procesora z odpadami. Twoja pamięć podręczna L3 to tylko kilka MB i utworzysz kilka MB śmieci, które skutecznie wypchnęłyby przydatne informacje, spowalniając działanie aplikacji.
- 1. JVM minuta długa GC
- 2. Dlaczego JVM tych serwerów Tomcat wykonuje pełną godzinę GC?
- 3. Ograniczanie kodu w metodzie, aby tylko wywoływać członków w tej samej klasie
- 4. Pusta nieskończona pętla i GC (JVM). Proszę wyjaśnić efekt
- 5. GC nie finalizuje UserControl?
- 6. Solr (JVM) szczyt każda godzina
- 7. Techniki powodujące konsekwentne GC Churn
- 8. częste duże gc ale nie wolne sterty?
- 9. Jak dostroić jvm do awarii zamiast heroicznej GC do 100% wykorzystania procesora?
- 10. Strojenie JVM dla wysokiej alokacji
- 11. Ograniczanie wskaźników i wstawianie
- 12. Ograniczanie długości wejścia w JTextField nie działa
- 13. Czy dobrą praktyką jest usuwanie odniesień, aby pomóc GC?
- 14. C# - Czy jest możliwe, aby zmienić GC Heap?
- 15. Serwer SQL nie może wywoływać metod Data
- 16. Dlaczego System.Timers.Timer przetrwał GC, ale nie System.Threading.Timer?
- 17. Jak ustawić sys.excepthook, aby wywoływać pdb globalnie w pythonie?
- 18. lsof odpowiednik JVM?
- 19. OK, aby wielokrotnie wywoływać MPI_Isend na jednym buforze?
- 20. Kiedy NIE wywoływać metody super() podczas przesłonięcia?
- 21. View.invalidate() nie wydaje się wywoływać View.onDraw()
- 22. Ograniczanie liczby rozproszonych
- 23. Ograniczanie widoczności pliku SWF
- 24. JVM okresowo zawiesza się
- 25. Clojure zamknięcia i GC
- 26. Zablokuj wyjście gc()
- 27. Ograniczanie opcji w scala?
- 28. Java GC safepoint
- 29. jakie funkcje są zawarte w JVM
- 30. Uruchamianie blokowania GC ObjectsAllocated
Nie bezpośrednio, nie. Jaki jest faktyczny problem, który próbujesz rozwiązać? – NPE
Może mógłbyś kupić maszynę z nieskończoną pamięcią, ale są one trudne do znalezienia :-) i nieskończenie kosztowne :-) –
@VishalK link nie działa –