Sobes.tech
Middle+

Millised omadused on Dart'i prügikorjajal?

sobes.tech AI

Vastus AI-lt

Dart kasutab põlvkondlikku prügikoristust (Generational Garbage Collection) algoritmi.

Peamised omadused:

  • Põlvkonnad (Generations): Objekte jagunevad kaheks:
    • Noore põlvkonna (Young Generation): Siin luuakse uusi objekte. Selle põlvkonna prügikoristus on kiirem ja sagedasem, kuna enamik objekte sureb varsti pärast loomist.
    • Vana põlvkond (Old Generation): Objekte, mis "üle elasid" mitu noore põlvkonna prügikoristustsüklit, liigutakse siia. Selle põlvkonna prügikoristus on harvem ja kestab kauem.
  • Ellujäänud (Survivors): Noore põlvkonna objektid, millele viitavad teised objektid, peetakse "ellujäänud" ja neid saab liigutada vanasse põlvkonda.
  • Koristusetapid:
    • Minor GC (Väike GC): Kiire koristus, mis hõlmab ainult noore põlvkonna objekte.
    • Major GC (Suur GC): Pikem koristus, kontrollib vanema põlvkonna objekte.
  • **Põlvkondlik prügikoristus eelis: **
    • Optimeerimine lühiajalistele objektidele: Enamik prügi eemaldatakse kiiresti noore põlvkonna seest.
    • Aja kokkuhoid pauside ajal: Sageli, kuid lühikesed pausid noore põlvkonna koristamiseks on vähem märgatavad kui harvad, kuid pikad pausid kogu mälu jaoks.
  • Dart VM-i prügikoristaja:
    • Kasutab hübriidset lähenemist, mis ühendab kopeerimise (copying collector) noore põlvkonna jaoks ja märgistamise ja liigutamise (mark-and-sweep/compact) vanema põlvkonna jaoks.
    • Kopeeriv koristaja liigub kiiresti elusad objektid teise mälu piirkonda, tõhusalt vabastades praeguse.
    • Märgistamine ja liigutamine vanemas põlvkonnas leiab elusad objektid ja liigutab need, et vähendada mälufragmenteerumist.
    • Toimib kasutajaliidese voogudest sõltumatult, minimeerides lukustusi.
// Näide objektide loomise kohta, mis kuuluvad noorele põlvkonnale
class MyClass {
  String name;
  MyClass(this.name);
}

void main() {
  var obj1 = MyClass("Object 1"); // Loob noorele põlvkonnale
  var obj2 = MyClass("Object 2"); // Loob noorele põlvkonnale

  // Kui objekte ei hoita viidetega, võivad need koguda
  // järgmise koristuse ajal noore põlvkonna sees.

  // Kui need objektid elavad kaua ja neil on viited, 
  // võivad need liikuda vanasse põlvkonda.
}