Jakie są pokolenia w Garbage Collection?

Nie rozumiem czym są "pokolenia" w kontekście Śmieciarstwa. Czy ktoś może wyjaśnić w prosty sposób?

Author: Mark Amery, 2010-02-13

3 answers

From Understanding Garbage Collection in. net

Pokolenia

Pokoleniowy Śmieciarz zbiera krótkotrwałe przedmioty więcej często niż te dłuższe. Krótkotrwałe obiekty są przechowywane w pierwsza generacja, pokolenie 0. Na dłuższe obiekty są wepchnięte do wyższe pokolenia, 1 lub 2. Na śmieciarka pracuje więcej często w niższych pokoleniach niż w wyższych.

Gdy obiekt jest tworzony po raz pierwszy, jest wprowadzone do generacji 0. Kiedy pokolenie 0 jest wypełnione, śmieci / align = "left" / Obiekty, które przetrwać wywóz śmieci w pierwsza generacja promowana jest na Następna wyższa generacja, pokolenie 1. Obiekty, które przetrwają śmieci kolekcja w generacji 1 to awans na kolejne i najwyższe pokolenie, pokolenie 2. To algorytm działa sprawnie dla wywóz śmieci obiektów, jak Informatyka jest szybki. Zauważ, że generacja 2 jest najwyższe pokolenie, które jest wspierany przez garbage collector.

Wywóz śmieci w. Net

Pokolenia

Podczas alokacji pamięci na zarządzana sterta jest szybka, GC sama to może trochę potrwać. Mając to na uwadze dokonano kilku optymalizacji aby poprawić wydajność. GC wspiera koncepcję pokoleń, opierając się na założeniu, że dłuższy obiekt był na stosie, im dłużej pewnie zostanie tam. Gdy obiekt jest przydzielany na sterta należy do generacji 0. Każdy Śmieciarz, który obiekt przeżywa zwiększa swoją generacji o 1 (obecnie najwyższy obsługiwana generacja to 2). Oczywiście szybciej przeszukiwać i śmieci zbierają podzbiór wszystkich obiektów na stercie, więc GC ma możliwość zbierania tylko generacji 0, 1 lub 2 obiekty (lub cokolwiek kombinacja, którą wybiera dopóki nie wystarczająca pamięć). Nawet gdy zbieranie tylko młodszych obiektów GC może również określić, czy stare obiekty mają odniesienia do nowych obiektów w celu zapewnienia że nie ignoruje obiekty w użyciu.

 56
Author: Adriaan Stander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-12 19:38:43

Jest ładny Opis W "Pro C # 2008":

  1. generowanie 0 identyfikuje nowo utworzony obiekt, który nigdy nie został oznaczony do kolekcji
  2. generacja 1 identyfikuje obiekt, który przetrwał GC (oznaczony do kolekcji, ale nie usunięty, ponieważ było wystarczająco dużo miejsca na stercie)
  3. generacja 2 identyfikuje obiekt, który przetrwał więcej niż jedno przeskoczenie GC.
 22
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-13 13:03:31

Mój pierwszy blog, Generations of Garbage Collection , odpowiada na twoje pytanie:

CLR ' s Garbage collector (GC) jest generacyjnym garbage collector, znanym również jako ephermal garbage collector.

Ma trzy pokolenia:

Pokolenie 0:

Zawiera wszystkie nowo zbudowane obiekty, które nigdy nie są badane przez GC.

Pokolenie 1:

CLR, po inicjalizacji, wybiera rozmiar budżetu w kb dla pokolenie 0 . Jeśli utworzenie obiektu spowoduje, że generacja 0 przekroczy jego budżet, uruchamiane jest usuwanie śmieci. Obiekty, które nie są zbierane w generacji 0, są przenoszone do generacji 1, A pokolenie 0 jest opróżniane. Załóżmy, że budżet generacji 0 jest równy wielkości 5 obiektów. Tak więc generowanie 0 wyglądałoby jak poniżej przed utworzeniem obiektu 6:

Tutaj wpisz opis obrazka

Po utworzeniu obiektu 6 rozpoczyna się przydzielanie śmieci, które deallokuje obiekty śmieci 1, 3 i 5 oraz przesuwa 2 i 4 sąsiadujące ze sobą w generacji 1.

Tutaj wpisz opis obrazka

Wielkość budżetu generacji 1 jest również wybierana przez CLR przy inicjalizacji. Utworzenie obiektu 11 powoduje ponowne uruchomienie GC, które może przenieść kilka obiektów do generacji 1.

Tutaj wpisz opis obrazka

Generacja 1 jest ignorowana do zbierania śmieci, dopóki nie osiągnie rozmiaru budżetu na śmieci kolekcja, która poprawia wydajność GC.

Pokolenie 2:

W ciągu kilku kolekcji generacji 0, generacja 1 może przekroczyć limit budżetowy, który powoduje, że GC zbiera śmieci z obu generacji. W tym przypadku ocaleni z generacji 1 awansują do generacji 2, ocaleni z generacji 0 do generacji 1, A generacja 0 jest pusta.

Powiedzmy, że obiekt alokacji 21 powoduje Garbage collection i generowanie 1 budżet został osiągnięty. Tutaj wpisz opis obrazka

Tak więc heap wyglądałby jak poniżej z obiektem, który przetrwał w generacji 1 awansowanym do generacji 2.

Tutaj wpisz opis obrazka

Więc zasadniczo Generation GC zakłada, że nowsze obiekty mają większe prawdopodobieństwo zebrania.

Wiemy, że CLR wybiera budżety dla wszystkich trzech generacji, ale może je modyfikować, ponieważ GC jest samodostrajającym się kolektorem. Jeśli GC widzi, że jest bardzo mało przetrwanie obiektów po zebraniu generacji 0, może zdecydować się na zmniejszenie budżetu generacji 0, tak, że mniejsza praca jest wykonywana. Z drugiej strony, jeśli GC zbiera generację 0 i widzi, że istnieje wiele ocalałych obiektów, nie odzyskano zbyt wiele pamięci w zbiorze śmieci. W tym przypadku garbage collector zwiększy budżet generacji 0. GC zmienia również odpowiednio budżety generacji 1 I generacji 2.

 15
Author: Deepak Mishra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-21 18:00:45