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.
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.
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.
Rozwiązaniem wad algorytmów skalarnych są algorytmy wektorowe, ale o tym później.