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.
}