Middle
Mis on prügikorjaja ja kuidas see töötab?
sobes.tech AI
Vastus AI-lt
Jäätmete kogujaja (Garbage Collector, GC) on automaatne mälu haldamise mehhanism, mis eraldab ja kasutamata mälu ja vabastab selle.
Tööpõhimõte:
- Mälu eraldamine: Kui programm loob objekte, eraldab jäätmete kogujaja neile ruumi virnas (heap).
- Juurdepääsetavuse määramine: Jäätmete kogujaja määrab, millised objektid on juurdepääsetavad programmi "juurtest" (root). Juured võivad olla kohalike muutujate kaudu jooksvates funktsioonides, statiliste muutujate, viidete kaudu lõngadest jms.
- Jäätmete kogumine: Objektid, mis ei ole juurtest kättesaadavad, loetakse "prügiks" ning nende mälu võib vabastada.
On erinevaid jäätmete kogumise algoritme, näiteks:
- Mark-and-Sweep (Märgi ja puhasta): Kogujaja läbib juurtest kättesaadavate objektide graafi, märgistades need. Seejärel läbib ta kogu virna ja vabastab märgistatud objektide mälu.
- Kopeerimine: Virn jaguneb kaheks osaks. Juurdepääsetavad objektid kopeeritakse ühest osast teise ning vana osa puhastatakse.
- Põlvkondlik: Objekti jaotatakse põlvkondadesse. Uued objektid satuvad noore põlvkonna, vanad — küpsema. Prügikoristus toimub sagedamini noorema põlvkonna juures, kuna enamik objekte on lühiajalised.
Näide Java keeles (lihtsustatud):
// Programm loob objekte virnas
Object obj1 = new Object();
Object obj2 = new Object();
// obj1 muutub kättesaamatuks
obj1 = null;
// Jäätmete kogujaja võib vabastada obj1 kasutatud mälu