Sobes.tech
Middle

Co víš o sběrači odpadků v Dart?

sobes.tech AI

Odpověď od AI

Dart používá jednovláknový sběrač odpadu založený na generacím sběru.

Klíčové vlastnosti:

  • Generační sběr: Objekty jsou rozděleny do dvou generací:
    • Mladá generace: Nové, krátkodobé objekty. Často se sbírají.
    • Starší generace: Dlouhodobé objekty, které přežily několik sběrů v mladé generaci. Sbírají se méně často.
  • Stop-the-World: Pro provedení sběru odpadu je nutné pozastavit běh programu (Dart Isolates). Díky jednovláknové povaze a optimalizacím jsou zpoždění minimální.
  • Mark-and-Sweep: Ve starší generaci se používá algoritmus Mark-and-Sweep. Nejprve jsou označeny dosažitelné objekty, poté jsou odstraněny nedosažitelné. Pro mladou generaci se používá algoritmus Copying Collector, který rychle přesouvá živé objekty do jiného prostoru paměti.
  • Žádné cykly sběru odpadu: Vývojář nemusí ručně spravovat paměť nebo volat GC. Systém to dělá automaticky.
  • Optimalizace: Zahrnují inline funkce, specializaci typů a alokaci objektů na zásobníku, což snižuje zátěž sběrače odpadu.

Například při vytváření nového objektu:

// Vytvoření nového objektu v "mladé" generaci paměti
var myObject = MyClass();

Pokud myObject zůstane v paměti a dostupný, časem bude přesunut do "starší" generace. Pokud přestane být dosažitelný, sběrač odpadu ho časem uvolní.

// myObject již není dosažitelný, může být sběračem odpadu shromážděn
myObject = null;

Je důležité pochopit, že sběrač odpadu v Dart je efektivní, ale není všelék na úniky paměti, které mohou vzniknout udržováním silných odkazů na objekty, které již nejsou potřeba (například nepřerušené odběry).