Sobes.tech
Middle

Czym jest zbieracz śmieci i jak działa?

sobes.tech AI

Odpowiedź od AI

Zbieracz śmieci (Garbage Collector, GC) to mechanizm automatycznego zarządzania pamięcią, który przydziela i zwalnia pamięć, której program już nie używa.

Zasada działania:

  1. Przydział pamięci: Gdy program tworzy obiekty, zbieracz śmieci przydziela dla nich miejsce na stercie (heap).
  2. Ustalanie dostępności: Zbieracz śmieci określa, które obiekty są dostępne z "korzeni" (root) programu. Korzeniami mogą być lokalne zmienne w aktualnie wykonywanych funkcjach, zmienne statyczne, odwołania z wątków itp.
  3. Zbiór śmieci: Obiekty, które nie są dostępne z korzeni, są uważane za "śmieci" i ich pamięć może być zwolniona.

Istnieją różne algorytmy zbierania śmieci, na przykład:

  • Mark-and-Sweep (Oznacz i wyczyść): Zbieracz przechodzi przez graf obiektów dostępnych z korzeni, oznaczając je. Następnie przechodzi przez cały heap i zwalnia pamięć oznaczonych obiektów.
  • Kopiowanie: Heap jest podzielony na dwie części. Dostępne obiekty są kopiowane z jednej części do drugiej, a stara część jest czyszczona.
  • Generacyjny: Obiekty dzielą się na pokolenia. Nowe obiekty trafiają do młodego pokolenia, stare do dojrzałego. Zbiór śmieci w młodym pokoleniu odbywa się częściej, ponieważ większość obiektów ma krótki czas życia.

Przykład działania w Java (uproszczony):

// Program tworzy obiekty na heap
Object obj1 = new Object();
Object obj2 = new Object();

// obj1 staje się niedostępny
obj1 = null;

// Zbieracz śmieci może zwolnić pamięć zajmowaną przez obj1