Zliczanie referencji

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Zliczanie referencji (ang. reference counting) - jest to jedna z najłatwiejszych metod odśmiecania, opracowana w 1959 roku przez Johna McCarthy'ego na potrzeby zarządzania pamięcią w języku programowania Lisp[1].

W metodzie tej, wraz z każdym zaalokowanym obiektem, skojarzony jest licznik, który służy do zliczania wszystkich aktualnych odwołań do obiektu. Za każdym razem, kiedy tworzone jest nowe odwołanie do obiektu, licznik ten jest zwiększany o jeden, natomiast kiedy odwołania te są usuwane, licznik jest zmniejszany o jeden. Kiedy wartość licznika osiągnie zero, oznaczać to będzie, że dany obiekt nie jest już osiągalny w prawidłowy sposób, więc można zwolnić pamięć mu przydzieloną. Jeśli przed skasowaniem ów obiekt sam używał referencji do innych obiektów, to liczniki odwołań tych obiektów także są zmniejszane; mogą zatem również osiągnąć wartość zero, co spowoduje rekursywne skasowanie kolejnych obiektów[1].

Waizenbaum zaproponowana zmodyfikowana wersja algorytmu, w której zamiast kasować rekursywnie obiekty dodajemy je do listy obiektów nieużywanych - a proces zwalniania pamięci jest przeprowadzany w późniejszym czasie[1].

Zaletą metody jest fakt, że zaalokowana pamięć jest zwalniana tak szybko jak to możliwe - tuż po tym jak licznik referencji osiągnie wartość 0. Metoda ta jest także prosta w implementacji[1].

Jedną z wad zliczanie referencji jest fakt, że nie nie radzi sobie z zależnościami cyklicznymi pomiędzy obiektami. Jeśli obiekt A wskazuje na obiekt B, natomiast obiekt B wskazuje z powrotem na obiekt A, to żaden z nich nie zostanie nigdy zwolniony. Wykorzystanie tej metody może także prowadzić do nadmiernej fragmentacji stosu pamięci[1].


Przypisy

  1. 1,0 1,1 1,2 1,3 1,4 Richard Jones, Rafael Lins: Garbage Collection: Algorithms For Automatic Dynamic Memory Mamagement. John Wiley & Sons, 1996. ISBN 0-471-94148-4.

Zobacz też[edytuj | edytuj kod]