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:
- Dodela memorije: Kada program kreira objekte, sakupljač smeća im dodeljuje prostor na hrpi (heap).
- 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.
- 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