Sobes.tech
Junior

Jak działa zbieracz śmieci w JavaScript?

sobes.tech AI

Odpowiedź od AI

W JavaScript automatyczny zbieracz śmieci działa, identyfikując obiekty, które nie są już dostępne z osiągalnych korzeni (obiekt globalny, bieżące wywołanie funkcji itp.) i zwalniając zajmowaną przez nie pamięć.

Główne mechanizmy:

  • Liczenie odwołań: Przestarzała metoda, która liczy liczbę odwołań do obiektu. Pamięć jest zwalniana, gdy licznik osiąga zero. Wada: nie obsługuje cyklicznych odwołań.
  • Oznaczanie i skanowanie: Nowoczesna i najczęściej stosowana metoda.
    1. Oznaczanie: Rozpoczynając od korzeni, zbieracz śmieci rekurencyjnie przechodzi graf obiektów, oznaczając wszystkie dostępne obiekty.
    2. Czyszczenie: Przechodzi po stercie i usuwa wszystkie obiekty, które nie zostały oznaczone jako dostępne.

Zaleta "Oznaczania i skanowania" w porównaniu do "Liczenia odwołań" jest taka, że poprawnie obsługuje odwołania cykliczne.

Silnik JavaScript (np. V8 w Chrome) stale monitoruje zużycie pamięci i uruchamia zbieracz śmieci w razie potrzeby. Programista nie może bezpośrednio kontrolować tego procesu, ale może na niego pośrednio wpływać, unikając niepotrzebnych odwołań i zarządzając cyklem życia złożonych obiektów.