Háttérbeli szemétgyűjtés
A háttérbeli szemétgyűjtésben (GC) a rendszer szükség szerint összegyűjti a rövid élettartamú generációkat (0 és 1), amíg a 2. generáció gyűjtése folyamatban van. A háttérbeli szemétgyűjtés egy vagy több dedikált szálon történik attól függően, hogy munkaállomásról vagy kiszolgálói GC-ről van-e szó, és csak a 2. generációs gyűjteményekre vonatkozik.
A háttérbeli szemétgyűjtés alapértelmezés szerint engedélyezve van. Engedélyezhető vagy letiltható a gcConcurrent konfigurációs beállítással .NET-keretrendszer alkalmazásokban, vagy a System.GC.Concurrent beállítással a .NET Core és a .NET 5 és újabb alkalmazásokban.
Feljegyzés
A háttérbeli szemétgyűjtés felváltja az egyidejű szemétgyűjtést, és .NET-keretrendszer 4- és újabb verziókban érhető el. A 4. .NET-keretrendszer csak a munkaállomás szemétgyűjtéséhez támogatott. A 4.5-ös .NET-keretrendszer kezdve a háttérbeli szemétgyűjtés a munkaállomás és a kiszolgáló szemétgyűjtéséhez is elérhető.
A háttérbeli szemétgyűjtés során a rövid élettartamú generációk gyűjteményét előtér szemétgyűjtésnek nevezzük. Előtérben lévő szemétgyűjtések esetén az összes felügyelt szál fel lesz függesztve.
Ha a háttérbeli szemétgyűjtés folyamatban van, és elegendő objektumot foglalt le a 0. generációban, a CLR a 0. vagy az 1. generációs előtérbeli szemétgyűjtést hajtja végre. A dedikált háttérbeli szemétgyűjtési szál gyakori biztonságos pontokon ellenőrzi, hogy van-e előtér-szemétgyűjtési kérés. Ha van ilyen, a háttérgyűjtemény felfüggeszti magát, hogy előtér-szemétgyűjtés következhessenek be. Az előtérben lévő szemétgyűjtés befejezése után a dedikált háttérbeli szemétgyűjtési szálak és a felhasználói szálak folytatódnak.
A háttérbeli szemétgyűjtés eltávolítja az egyidejű szemétgyűjtés által előírt foglalási korlátozásokat, mivel a háttérbeli szemétgyűjtés során rövid élettartamú szemétgyűjtések fordulhatnak elő. A háttérbeli szemétgyűjtés képes eltávolítani az elhalt objektumokat a tiszavirág generációkban. Szükség esetén az 1. generációs szemétgyűjtés során is bővíthető a halom.
Háttér-munkaállomás és kiszolgálói GC
A 4.5-ös .NET-keretrendszer kezdve a háttérbeli szemétgyűjtés elérhető a kiszolgálói GC-hez. A háttérbeli GC a kiszolgáló szemétgyűjtésének alapértelmezett módja.
A háttérkiszolgáló szemétgyűjtési funkciói a háttér-munkaállomás szemétgyűjtéséhez hasonlóan működnek, de van néhány különbség:
A háttér-munkaállomás szemétgyűjtése egy dedikált háttérbeli szemétgyűjtési szálat használ, míg a háttérkiszolgáló szemétgyűjtése több szálat használ. Általában minden logikai processzorhoz külön szál tartozik.
A munkaállomás háttérbeli szemétgyűjtési szálával ellentétben a háttérkiszolgáló GC-szálai nem időtúllépést hajtanak végre.
Az alábbi ábra egy külön, dedikált szálon végzett háttér-munkaállomás szemétgyűjtését mutatja be:
Az alábbi ábrán a háttérkiszolgáló külön, dedikált szálakon végzett szemétgyűjtése látható:
Egyidejű szemétgyűjtés
Tipp.
Ez a szakasz a következőkre vonatkozik:
- .NET-keretrendszer 3.5-ös és korábbi verzió a munkaállomás szemétgyűjtéséhez
- .NET-keretrendszer 4- és korábbi verzió a kiszolgáló szemétgyűjtéséhez
Az egyidejű szemetet a későbbi verziókban háttérbeli szemétgyűjtés váltja fel.
A munkaállomáson vagy a kiszolgálói szemétgyűjtésben engedélyezheti az egyidejű szemétgyűjtést, amely lehetővé teszi, hogy a szálak párhuzamosan fussanak egy dedikált szállal, amely a gyűjtemény teljes időtartama alatt elvégzi a szemétgyűjtést. Ez a beállítás csak a 2. generációs szemétgyűjtéseket érinti; 0 és 1 generáció mindig nem egyidejű, mert gyorsan befejeződnek.
Az egyidejű szemétgyűjtés lehetővé teszi, hogy az interaktív alkalmazások rugalmasabbak legyenek a gyűjtemények szüneteltetésének minimalizálásával. A felügyelt szálak az idő nagy részében továbbra is futtathatók, amíg az egyidejű szemétgyűjtési szál fut. Ez a kialakítás rövidebb szüneteket eredményez a szemétgyűjtés során.
Az egyidejű szemétgyűjtés dedikált szálon történik. Alapértelmezés szerint a CLR a munkaállomás szemétgyűjtését futtatja egyidejűleg engedélyezett szemétgyűjtéssel az egyprocesszoros és a többprocesszoros számítógépeken is.
Az alábbi ábrán egy külön dedikált szálon végzett egyidejű szemétgyűjtés látható.