Uvolňování paměti na pozadí

V případě uvolňování paměti na pozadí (GC) se podle potřeby shromažďují dočasné generace (0 a 1), zatímco probíhá shromažďování generace 2. Uvolňování paměti na pozadí se provádí na jednom nebo více vyhrazených vláknech v závislosti na tom, jestli se jedná o pracovní stanici nebo serverový uvolňování paměti, a vztahuje se pouze na kolekce generace 2.

Uvolňování paměti na pozadí je ve výchozím nastavení povolené. Dá se povolit nebo zakázat s nastavením konfigurace gcConcurrent v aplikacích .NET Framework nebo v nastavení System.GC.Concurrent v aplikacích .NET Core a .NET 5 a novějších aplikacích.

Poznámka:

Uvolňování paměti na pozadí nahrazuje souběžné uvolňování paměti a je k dispozici v rozhraní .NET Framework 4 a novějších verzích. V rozhraní .NET Framework 4 se podporuje pouze pro uvolňování paměti pracovní stanice . Počínaje rozhraním .NET Framework 4.5 je uvolňování paměti na pozadí dostupné pro pracovní stanici i pro uvolňování paměti serveru .

Kolekce v dočasných generacích během uvolňování paměti na pozadí se označuje jako uvolňování paměti popředí. Když dojde k uvolňování paměti na popředí, pozastaví se všechna spravovaná vlákna.

Pokud probíhá uvolňování paměti na pozadí a přidělili jste dostatek objektů v generaci 0, CLR provede generování 0 nebo 1. generace uvolňování paměti v popředí. Vyhrazené vlákno uvolňování paměti na pozadí kontroluje v častých bezpečných bodech, abyste zjistili, zda existuje požadavek na uvolňování paměti na popředí. Pokud existuje, kolekce na pozadí se pozastaví, aby mohlo dojít k uvolňování paměti popředí. Po dokončení uvolňování paměti popředí se obnoví vyhrazená vlákna uvolňování paměti na pozadí a uživatelská vlákna.

Uvolňování paměti na pozadí odebere omezení přidělení uložená souběžným uvolňováním paměti, protože dočasné uvolňování paměti může dojít během uvolňování paměti na pozadí. Uvolňování paměti na pozadí může odebrat mrtvé objekty v dočasných generacích. Může také rozšířit haldu v případě potřeby během uvolňování paměti 1. generace.

Pracovní stanice na pozadí versus serverový uvolňování paměti

Počínaje rozhraním .NET Framework 4.5 je pro uvolňování paměti serveru k dispozici uvolňování paměti na pozadí. Uvolňování paměti na pozadí je výchozím režimem pro uvolňování paměti serveru.

Funkce uvolňování paměti serveru na pozadí podobně jako uvolňování paměti pracovní stanice na pozadí, ale existuje několik rozdílů:

  • Uvolňování paměti pracovní stanice na pozadí používá jedno vyhrazené vlákno uvolňování paměti na pozadí, zatímco uvolňování paměti serveru na pozadí používá více vláken. Obvykle existuje vyhrazené vlákno pro každý logický procesor.

  • Na rozdíl od vlákna uvolňování paměti na pozadí pracovní stanice nevypadá časový limit vláken uvolňování paměti serveru na pozadí.

Následující obrázek znázorňuje uvolňování paměti pracovní stanice na pozadí prováděné na samostatném vyhrazeném vlákně:

Background workstation garbage collection

Následující obrázek ukazuje uvolňování paměti serveru na pozadí prováděné na samostatných vyhrazených vláknech:

Background server garbage collection

Souběžné uvolňování paměti

Tip

Tato část platí pro:

  • .NET Framework 3.5 a starší pro uvolňování paměti pracovní stanice
  • .NET Framework 4 a starší pro uvolňování paměti serveru

Souběžné uvolňování paměti se nahradí uvolňováním paměti na pozadí v novějších verzích.

V pracovní stanici nebo serveru uvolňování paměti můžete povolit souběžné uvolňování paměti, což umožňuje, aby vlákna běžela souběžně s vyhrazeným vláknem, které provádí uvolňování paměti po většinu doby trvání kolekce. Tato možnost má vliv pouze na uvolňování paměti v generaci 2; generace 0 a 1 nejsou vždy souběžné, protože se dokončí rychle.

Souběžné uvolňování paměti umožňují interaktivním aplikacím reagovat minimalizací pozastavení kolekce. Spravovaná vlákna můžou běžet většinu času, zatímco běží souběžné vlákno uvolňování paměti. Výsledkem tohoto návrhu je kratší pozastavení v době, kdy dochází k uvolňování paměti.

Souběžné uvolňování paměti se provádí ve vyhrazeném vlákně. CLR ve výchozím nastavení spouští uvolňování paměti pracovní stanice se souběžným uvolňováním paměti na počítačích s jedním procesorem i s více procesory.

Následující obrázek ukazuje souběžné uvolňování paměti prováděné na samostatném vyhrazeném vlákně.

Concurrent Garbage Collection Threads

Viz také