Middle
Ispričajte o metodama prikupljanja smeća (Garbage Collector).
sobes.tech АИ
Одговор од АИ
Metode prikupljanja smeća:
- Reference Counting (Brojanje referenci): Svaki objekat čuva brojač referenci na sebe. Kada brojač dostigne nulu, objekat se smatra otpadom i briše se.
- Prednosti: Jednostavno, ne blokira izvršavanje glavnog programa na duže vreme.
- Nedostaci: Ne rešava ciklične reference; zahteva dodatni prostor za brojač u svakom objektu.
- Tracing Garbage Collectors (Trasirajući sakupljači smeća): Počinju sa skupom "korenovih" objekata (npr. aktivne promenljive, stek poziva) i rekurzivno prolaze sve objekte dostupne iz ovih korena. Nedostupni objekti se smatraju otpadom.
- Glavne strategije trasiranja:
- Mark and Sweep (Označavanje i brisanje):
- Mark (Označavanje): Prolaz kroz graf objekata i označavanje svih dostupnih objekata.
- Sweep (Brisanje): Drugi prolaz kroz memoriju, uklanjajući sve neoznačene objekte.
- Nedostaci: Fragmentacija memorije.
- Mark and Compact (Označavanje i kompaktovanje):
- Mark (Označavanje): Kao u Mark and Sweep.
- Compact (Kompaktovanje): Pomera žive objekte tako da budu raspoređeni kontinuirano, eliminišući fragmentaciju.
- Nedostaci: Složenije, može zahtevati zaustavljanje izvršavanja programa.
- Copying (Kopiranje): Memorija je podeljena na dve oblasti (poluprostore). U svakoj iteraciji sakupljanja smeća, živi objekti iz jedne oblasti se kopiraju u drugu. Zatim se stara oblast potpuno čisti.
- Prednosti: Bez fragmentacije, brza alokacija memorije nakon sakupljanja.
- Nedostaci: Potreban je dvostruki prostor u odnosu na aktivno korišćeni.
- Mark and Sweep (Označavanje i brisanje):
- Glavne strategije trasiranja:
- Generational Garbage Collection (Generaciono sakupljanje smeća): Bazirano na pretpostavci da većina objekata živi kratko. Memorija je podeljena na generacije (mlado, staro). Objekti se postavljaju u mlado generisanje pri kreiranju. Ako objekat "preživi" nekoliko sakupljanja u mladom generisanju, premešta se u staro. Sakupljanje smeća se češće dešava u mladom generisanju.
- Prednosti: Efikasno, jer se veći deo posla obavlja u mladom generisanju sa malim obimom podataka.
- Nedostaci: Zahteva praćenje referenci iz starijih generacija na mlade (npr. pomoću kartica zapisa ili drugih mehanizama).
Primeri jezika i njihovih GC:
- Python: Reference Counting (sa cikličkim sakupljanjem za cikličke reference).
- Java, C#: Generational, Mark and Sweep, Mark and Compact, Copying (različite varijante i kombinacije u zavisnosti od konkretne verzije i podešavanja JVM/.NET).
- Go: Concurrent, non-generational Mark and Sweep sa optimizacijama.