Middle
Mi az a szemétgyűjtő és hogyan működik?
sobes.tech MI
Válasz az MI-től
A szemétgyűjtő (Garbage Collector, GC) egy automatikus memória-kezelő mechanizmus, amely memória foglalását és felszabadítását végzi, amikor az már nem használatos a program által.
Működési elv:
- Memória foglalás: Amikor egy program objektumokat hoz létre, a szemétgyűjtő helyet foglal azok számára a heap-en.
- Elérhetőség meghatározása: A szemétgyűjtő meghatározza, hogy mely objektumok érhetők el a program "gyökereiből" (root). A gyökerek lehetnek helyi változók a futó függvényekben, statikus változók, szálakból származó hivatkozások stb.
- Szemétgyűjtés: Azok az objektumok, amelyek nem érhetők el a gyökereken keresztül, "szemétnek" számítanak, és a memóriájuk felszabadítható.
Különböző szemétgyűjtő algoritmusok léteznek, például:
- Mark-and-Sweep (Jelölés és takarítás): A gyűjtő végigmegy az elérhető objektográf grafikon, jelölve azokat. Ezután végigmegy az egész heap-en, és felszabadítja a jelölt objektumok memóriáját.
- Másolás: A heap két részre van osztva. Az elérhető objektumokat egyik részről a másikra másolja, a régi részt pedig megtisztítja.
- Generációs: Az objektumokat generációkra osztják. Az új objektumok a fiatal generációba kerülnek, a régebbiek a felnőttbe. A szemétgyűjtés gyakrabban történik a fiatal generációban, mivel a legtöbb objektumnak rövid élettartama van.
Java példában (egyszerűsített):
// A program objektumokat hoz létre a heap-en
Object obj1 = new Object();
Object obj2 = new Object();
// obj1 elérhetetlenné válik
obj1 = null;
// A szemétgyűjtő felszabadíthatja az obj1 által foglalt memóriát