Garbage collection – zliczanie referencji

Garbage collector – potocznie nazywany “odśmiecaczem”. Jest tak naprawdę automatycznym procesem odpowiedzialnym za identyfikowanie nieużywanych obiektów, a następnie za ich usunięcie. Nieużywane obiekty to takie, do których nie ma żadnych referencji, czyli nie mamy możliwości dostania się do tego obiektu. Brak możliwości dostania się do obiektu jest jednoznaczny z usunięciem obiektu, a to oznacza zwolnienie obszaru pamięci. 

GC (skrót od Garbage Collector) zawiera wiele zaimplementowanych algorytmów odpowiedzialnych za rozpoznawanie obiektów. Algorytmy te można podzielić na:

  • skalarne
  • wektorowe

Zliczanie referencji (ang. reference counting) jest jednym z algorytmów skalarnych. Polega on na zliczaniu referencji, czyli odwołań do obiektu. Zliczanie to polega na inkrementacji (w momencie dodania nowej referencji) lub dekrementacji (w momencie usunięcia referencji) wartości przypisanej do obiektu. Wartość ta prezentuje ilość odwołań do obiektu. W przypadku, gdy wartość ta jest równa zero oznacza to, że obiekt może być usunięty. Usunięcie obiektu sprawia zwolnienie obszaru pamięci. Rysunek poniżej przedstawia schemat działania: object 1 oraz object 2 przechowują referencje do object 3, dlatego wartość wynosi 2. Object 4 ma referencję do object 5, więc wartość wynosi 1.

referenceCounting1

Po przypisaniu object 1 oraz object 2 do object 5, object 3 ma wartość zero co oznacza, iż może być usunięty z pamięci.

referenceCounting2

Jednak ten algorytm ma poważną wadę, nie radzi sobie z cyklami (nie jest w stanie rozpoznać cyklu). Cykl to sytuacja, w której object 1 wskazuje na object 3, a object 3 wskazuje na object 1.

referenceCounting3

Rozwiązaniem wad algorytmów skalarnych są algorytmy wektorowe, ale o tym później.

  • tomaashh

    Artykuł czyta się bardzo przyjemnie. Zabrakło mi jeszcze tylko informacji o słabych referencjach, jeżeli chodzi o powyższą tematykę. Trzymajcie tak dalej !