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