Sobes.tech
Middle

Šta znaš o sakupljaču smeća u Dart-u?

sobes.tech АИ

Одговор од АИ

Dart koristi jednostruki sakupljač smeća zasnovan na generacijskom sakupljanju.

Ključne karakteristike:

  • Generacijsko sakupljanje: Objekti se dele na dve generacije:
    • Mlado generisanje: Novi, kratkotrajni objekti. Često se sakupljaju.
    • Staro generisanje: Dugotrajni objekti koji su preživeli nekoliko sakupljanja u mladom generisanju. Ređe se sakupljaju.
  • Stop-the-World: Za izvršenje sakupljanja smeća, potrebno je zaustaviti izvršavanje programa (Dart izolati). Međutim, zahvaljujući jednostranosti i optimizacijama, kašnjenja su minimalna.
  • Mark-and-Sweep: U starom generisanju koristi se algoritam Mark-and-Sweep. Prvo se označavaju dostupni objekti, zatim se uklanjaju nedostupni. Za mlado generisanje koristi se algoritam Copying Collector, koji brzo premešta žive objekte u drugi prostor memorije.
  • Bez ciklusa sakupljanja smeća: Programer ne mora ručno upravljati memorijom ili pozivati GC. Sistem to radi automatski.
  • Optimizacije: Uključuju inline funkcije, specijalizaciju tipova i alokaciju objekata na steku, što smanjuje opterećenje sakupljača smeća.

Na primer, prilikom kreiranja novog objekta:

// Kreiranje novog objekta u "mladom" generisanju memorije
var myObject = MyClass();

Ako myObject ostane u memoriji i dostupan je duže vreme, vremenom će biti premešten u "starije" generisanje. Ako prestane biti dostupan, sakupljač smeća će ga na kraju osloboditi.

// myObject sada nije dostupan, može biti sakupljen od strane sakupljača smeća
myObject = null;

Važno je razumeti da je sakupljač smeća u Dart efikasan, ali nije panacea za curenje memorije, koje može nastati zbog čuvanja jakih referenci na objekte koji više nisu potrebni (npr. neotkazane pretplate).