Sobes.tech
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):
        1. Mark (Označavanje): Prolaz kroz graf objekata i označavanje svih dostupnih objekata.
        2. Sweep (Brisanje): Drugi prolaz kroz memoriju, uklanjajući sve neoznačene objekte.
        • Nedostaci: Fragmentacija memorije.
      • Mark and Compact (Označavanje i kompaktovanje):
        1. Mark (Označavanje): Kao u Mark and Sweep.
        2. 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.
  • 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.