Sobes.tech
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:

  1. Mälu eraldamine: Kui programm loob objekte, eraldab jäätmete kogujaja neile ruumi virnas (heap).
  2. 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.
  3. 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