Rozmiar młodej generacji w Garbage Collection ma znaczący wpływ na wydajność zbierania śmieci. Młode pokolenie jest częścią stosu, w której przydzielana jest większość nowych obiektów i jest zbierana częściej niż stare pokolenie. Związek między wielkością młodej generacji a wydajnością zbierania śmieci obejmuje różne kompromisy związane z częstotliwością i czasem trwania zdarzeń zbierania śmieci.
Częstotliwość mniejszych kolekcji
Zwiększenie wielkości młodego pokolenia generalnie powoduje mniejsze zbiory śmieci. Niewielkie kolekcje występują, gdy młode pokolenie się zapełnia, więc większe młode pokolenie zapewnia więcej miejsca na nowe alokacje przed uruchomieniem kolekcji. Zmniejsza to częstotliwość tych kolekcji, co może poprawić wydajność, ponieważ niewielkie kolekcje są ogólnie krótsze i mniej destrukcyjne niż główne kolekcje. Kiedy młode pokolenie jest duże, JVM może przydzielić i przetrwać więcej przedmiotów bez konieczności natychmiast ich zbierania, co prowadzi do rzadszych przerw w zbieraniu śmieci.
Rozmiar starych pokoleń i głównych kolekcji
Jeśli jednak całkowity rozmiar sterty jest ustalony, większe młode pokolenie oznacza mniejsze stare pokolenie. Old Generation przechowuje obiekty, które przetrwały wiele kolekcji w młodym pokoleniu i mają zwykle dłuższe życie. Mniejsze stare pokolenie prowadzi do częstszych głównych kolekcji, które są droższe pod względem czasu pauzy i użytkowania procesora niż mniejsze kolekcje. Główne kolekcje oczyszczają stare pokolenie i mogą znacząco wpłynąć na przepustowość zastosowań i reakcję, jeśli występują zbyt często.
Optymalna równowaga zależy od czasów życia obiektu
Optymalny rozmiar młodego pokolenia zależy od cech alokacji i życia obiektów aplikacji. Jeśli aplikacja tworzy wiele krótkotrwałych obiektów, większe młode pokolenie może poprawić wydajność poprzez zmniejszenie częstotliwości mniejszych kolekcji bez nadmiernego zwiększania większej częstotliwości kolekcji. Jeśli aplikacja ma wiele długowiecznych obiektów, równoważenie wielkości, aby zapewnić odpowiednią przestrzeń starej generacji, aby uniknąć kosztownych dużych kolekcji.
JVM Opcje strojenia
Rozmiar młodej generacji można kontrolować za pomocą opcji JVM. Na przykład opcja „-xx: newRatio` ustawia stosunek między starymi i młodymi generacjami. Na przykład `-xx: newratio = 3` oznacza, że stare pokolenie jest trzykrotnie większe niż młode pokolenie, więc młode pokolenie ma około jednej czwartej sterty. Opcje takie jak `-xx: newsize` i` -xx: maxnewSize` umożliwiają dokładniejszą kontrolę, ustawiając ustalone rozmiary lub granice w rozmiarze młodej generacji. Naprawienie rozmiaru młodej generacji może pomóc ustabilizować wydajność zbierania śmieci.
Przeżywające przestrzenie w młodym pokoleniu
W młodym pokoleniu przestrzenie ocalałych obsługują przedmioty, które przetrwają drobne kolekcje, ale mogą jeszcze nie być wystarczająco duże, aby awansować do starego pokolenia. Strojenie rozmiarów przestrzeni przeżycia (skonfigurowane przez „-xx: Survivorratio`) wpływa na to, jak długo obiekty pozostają w młodym pokoleniu przed promocją. Zbyt małe przestrzenie ocalałych powodują przedwczesną promocję, zwiększając wielkość starej generacji i główną częstotliwość zbierania. Zbyt duże przestrzenie ocalałych marnują pamięć i zmniejszają zdolność młodego pokolenia do nowych alokacji.
Wpływ na przepustowość i czas pauzy
Większe młode pokolenie zmniejsza częstotliwość mniejszych kolekcji, co ogólnie zmniejsza GC narzut i poprawia przepustowość. Jednak gdy nastąpi niewielka kolekcja, skanowanie może potrwać dłużej ze względu na większą przestrzeń sterty. I odwrotnie, mniejsze młode pokolenie prowadzi do częstszych, ale krótszych mniejszych kolekcji. Ogólny wpływ na przepustowość aplikacji, opóźnienie i czas pauzy zależy od tego kompromisu.
empiryczne strojenie i rejestrowanie
Monitorowanie rejestrowania zbierania śmieci JVM może pomóc w określaniu odpowiedniego rozmiaru młodego pokolenia, analizując częstotliwość i czas trwania mniejszych i głównych kolekcji wraz z wykorzystaniem przestrzeni przeżycia. Narzędzia i opcje, takie jak `-xlog: GC, Age` zapewnia szczegółowe dane dotyczące zachowania GC, aby skutecznie dostroić te parametry w oparciu o prawdziwe charakterystyki obciążenia.
Streszczenie
Podsumowując, rozmiar młodej generacji wpływa na wydajność zbierania śmieci przez:
- Większe młode pokolenie zmniejsza częstotliwość mniejszych kolekcji, ale może zwiększyć częstotliwość głównych kolekcji z powodu mniejszej starej pokolenia.
- Mniejsze młode pokolenie zwiększa niewielką częstotliwość kolekcji, ale skraca niewielki czas trwania kolekcji.
- Optymalny rozmiar zależy od wzorców życia obiektu w aplikacji.
-Parametry JVM, takie jak `-xx: newratio`,` -xx: newsize` i `-xx: maxnewSize` kontroluj rozmiar młodej generacji do strojenia.
- Rozmiary przestrzeni przeżycia wpływa na promocję obiektu i ogólną wydajność GC.
- Strojenie wydajności wymaga starannej równowagi, aby zoptymalizować czas przepustowości i przerwy, poinformowany przez empiryczne dzienniki GC i monitorowanie.