Sobes.tech
Middle

Mida sa tead Dart'i prügikoristaja kohta?

sobes.tech AI

Vastus AI-lt

Dart kasutab ühevoogulist prügikoristajat, mis põhineb põlvkondlikul prügikoristusel (generational garbage collection).

Peamised omadused:

  • Põlvkondlik kogumine: objektid jagunevad kaheks põlvkonnaks:
    • Noor põlvkond: uued, lühiajalised objektid. Kogutakse sageli.
    • Vanem põlvkond: pika elueaga objektid, mis on üle elanud mitu kogumist noores põlvkonnas. Kogutakse harvem.
  • Peatu-maailm: prügikoristuse teostamiseks tuleb programmi (Dart isoleeritud) täitmine peatada. Kuid ühevoogulisuse ja optimeerimiste tõttu on viivitused minimaalsed.
  • Märgi-ja-korista: vanemas põlvkonnas kasutatakse märgi-ja-korista algoritmi. Esiteks märgitakse kättesaadavad objektid, seejärel kustutatakse kättesaamatud. Noore põlvkonna puhul kasutatakse kopeeriva kogumise algoritmi, mis kiiresti liigutab elavaid objekte teise mäluplokki.
  • Tsüklite puudumine: arendajal ei ole vaja mälu käsitsi hallata ega GC-d kutsuda. Süsteem teeb seda automaatselt.
  • Optimeerimised: hõlmavad funktsioonide inliningut, tüüpide spetsialiseerimist ja objektide eraldamist virna, mis vähendab kogumise koormust.

Näide uue objekti loomisel:

// Uue objekti loomine "noore" põlvkonna mälus
var myObject = MyClass();

Kui myObject püsib kaua mälus ja on kättesaadav, siis aja jooksul see liigub "vanema" põlvkonna. Kui see muutub kättesaamatuks, vabastab kogumissüsteem selle varakult või hiljem.

// myObject on nüüd kättesaamatu, see võib prügikoristaja poolt kogutakse
myObject = null;

Oluline on mõista, et Dart'i prügikoristaja on tõhus, kuid ei ole kõikehõlmav mälu lekkide vastu, mis võivad tekkida tugeva viite hoidmisel objektidele, mis enam ei ole vajalikud (näiteks tellimused, mis pole tühistatud).