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:
- Przydział pamięci: Gdy program tworzy obiekty, zbieracz śmieci przydziela dla nich miejsce na stercie (heap).
- 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.
- 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