Sobes.tech
Middle

Šta je sakupljač smeća i kako radi?

sobes.tech АИ

Одговор од АИ

Sakupljač smeća (Garbage Collector, GC) je mehanizam za automatsko upravljanje memorijom koji dodeljuje i oslobađa memoriju koja više nije u upotrebi od strane programa.

Princip rada:

  1. Dodela memorije: Kada program kreira objekte, sakupljač smeća im dodeljuje prostor na hrpi (heap).
  2. Određivanje dostupnosti: Sakupljač smeća određuje koje objekte su dostupne iz "korenja" (root) programa. Korenja mogu biti lokalne promenljive u funkcijama koje se izvršavaju, statičke promenljive, reference iz niti itd.
  3. Prikupljanje smeća: Objekti koji nisu dostupni iz korena smatraju se "smećem" i njihova memorija može biti oslobođena.

Postoje različiti algoritmi za prikupljanje smeća, na primer:

  • Mark-and-Sweep (Označi i očisti): Sakupljač prolazi kroz graf dostupnih objekata iz korena, označava ih. Zatim prolazi kroz celu hrpu i oslobađa memoriju označenih objekata.
  • Kopiranje: Hrpa je podeljena na dva dela. Dostupni objekti se kopiraju iz jednog dela u drugi, a stari deo se čisti.
  • Generacijski: Objekti se dele na generacije. Novi objekti ulaze u mladu generaciju, stari u zrelu. Prikupljanje smeća se češće dešava u mladoj generaciji jer većina objekata ima kratak vek trajanja.

Primer u Javi (pojednostavljeno):

// Program kreira objekte na hrpi
Object obj1 = new Object();
Object obj2 = new Object();

// obj1 postaje nedostupan
obj1 = null;

// Sakupljač smeća može osloboditi memoriju koju zauzima obj1