Alapjai szemétgyűjtő

Az alábbi lista a fontos fogalmakat memória a CLR.

A virtuális memória lehet három államban.

Ingyenes. Hivatkozásokat a blokk memória áll rendelkezésre, és ez választható.

Fenntartva. A memória egység áll a használatra a fejlesztő, és nem használható semmilyen más kiosztási kérelem. Azonban az adatok megőrzésével a memóriában blokk nem lehetséges, amíg ki van jelölve.

Kiemelve. A memória egység rendelt fizikai tárolására.

Miután inicializálás, a CLR szemétgyűjtő memóriát szegmens a tárolási és kezelési területek. Ez a memória az úgynevezett irányított kupac szemben a saját operációs rendszer kupac.

Sikerült kupac jön létre az egyes szabályozott folyamat. Az összes szál a folyamat memóriát kiosztani objektumok hasonló halom.

Ahhoz, hogy szabad memóriát szemétgyűjtő okoz a Win32 VirtualAlloc funkció memóriát egy szegmens egy időben szabályozott alkalmazásokhoz. A szemétgyűjtő fenntartja továbbá a szegmenseket szükséges, és visszaadja a felszabadított szegmenseket az operációs rendszer (pre-elszámolási őket minden objektum) okozva Win32 VirtualFree funkciót.

A méret a szegmensek által kiosztott a szemétgyűjtő, megvalósítástól függ, és lehet bármikor módosítható, így többek között a rendszeres frissítéseket. Az alkalmazás nem tesz feltételezéseket akkora, mint egy adott szegmens, támaszkodnak rá, vagy próbálja meg beállítani a rendelkezésre álló memória méretét elosztása szegmensben.

A kisebb tárgyakat osztottak ki a kupac, annál kevésbé lesz futtatni a szemétgyűjtő. Amikor elhelyezzük a tárgyak ne használja a kerekített értéke meghaladja a tényleges igények, például ne válassza a 32 byte mindössze 15 bájt.

A szemétgyűjtés, ha fut, felszabadítja a memóriát foglal el a nem használt tárgyakat. kiadási folyamat összenyomja a használt tárgyakat, hogy azok együtt mozognak, és eltávolítja a helyet foglalja el a fel nem használt tárgyak, így csökkentve a halom. Ez biztosítja, hogy az objektumok elosztott közösen, marad a kezelt halom mellett, hogy megmentse őket helyben.

Az interferencia mértékét (gyakorisága és időtartama) szemetet gyűjtemények számától függ disztribúciók és tartósított a kezelt memória halom.

Heap lehet tekinteni, mint amely két halom: egy halom nagy tárgyakat, és egy csomó kis tárgyak.

Egy rakás nagy objektumok tartalmaznak nagyon nagy méretű tárgyakat, amelyeknek a mérete 85000 bájt. Tárgyak egy halom nagy tárgyak általában tömbök. Az objektum például ritkán igen nagy.

Egy rakás szerveződött generáció, amely lehetővé teszi, hogy kezelni a hosszú élettartamú és rövid élettartamú tárgyak. A szemétgyűjtés többnyire csak a pusztítás a rövid életű tárgyak, amelyek jellemzően foglalnak csak egy kis része a halom. Egy kupacban, három generáció tárgyakat.

Generation 0. Ez a fiatalabb generáció tartalmaz rövid életű tárgyakat. Egy példa a rövid életű objektum egy átmeneti változó. Szemétgyűjtő történik ezen generáció gyakran.

Re-elosztott objektumok egy új generációja helyszínek és összeállítások értelemszerűen generációs 0, ha nem nagy tárgyak, különben esnek egy halom nagy objektumok generációs szerelvény 2.

A legtöbb tárgy megsemmisül, ha szemétgyűjtő generációk 0 és nem éli túl a következő generációnak.

Generation generációs 1. Ez tartalmaz egy rövid életű tárgyak, és ez szolgál a puffer között, a rövid életű és hosszú életű tárgyak.

Generation 2 Ez a generáció tartalmaz hosszú életű tárgyakat. Egy példa erre a hosszú életű tárgyak a szerver alkalmazás objektumot tartalmaz statikus adatokat, hogy létezik egy olyan folyamatban időtartama.

Szemétgyűjtés végezzük konkrét generációk megfelelő körülmények között. generációs összeállítás: a tárgyak gyűjteménye ez a generáció, és az összes érintett fiatalabb generációk. generációs 2 szemétgyűjtő is hívják teljes szemétgyűjtő, mert elpusztítja az összes objektumot minden generáció (azaz az összes tárgyat a kezelt halom).

Tárgyak, amelyek nem semmisülnek meg a szemétgyűjtés, az úgynevezett túlélő tárgyakat és add meg a következő generáció. Tárgyak, szemétgyűjtő túlélte generációk 0, menjen a következő egy, a tárgyakat, hogy túlélte szemétgyűjtő generációról generációra 1 2 pass, és a tárgyakat, hogy túlélte szemétgyűjtő generation 2 marad generációs 2.

Amikor a szemétgyűjtő érzékel nagy része a túlélést generáció, ez felveti a küszöb eloszlások erre generációról a másikra szemétgyűjtő megszabadítjuk észrevehető része a memória. A CLR folyamatosan ellenőrzik mérleg két prioritás: nem teszi lehetővé az alkalmazás munkakészlet, hogy túl nagy és nem teszi lehetővé a szemétgyűjtés, hogy túl sok időt.

Mivel a tárgyak generációk 0 és 1 rövid életű, a generációk úgynevezett efemer generáció.

Efemer generációs kell elosztani a memóriában szegmensben, amely az úgynevezett efemer szegmens. Minden új szegmens által termelt szemétgyűjtő válik az új efemer szegmens és olyan objektumokat tartalmaz, hogy túlélte a szemétgyűjtő generálására 0. Old efemer szegmens válik egy új generációs szegmens 2.

Efemer szegmens mérete attól függ, hogy a rendszer 32-bites vagy 64 bites, és a típus a szemétgyűjtő. Az alábbi táblázat az alapértelmezett értékeket.

A szemétgyűjtés az alábbi lépéseket:

Phase jelölést megkeresi az összes tárgyat, és töltsük fel a listára.

A lépést mozgó, frissítése hivatkozásokat az összenyomható tárgyakat.

Lépés tömörítés, felszabadító által elfoglalt tér nem használt tárgyak és tömöríti a túlélő tárgyakat. Szakaszában tömörítés az objektumokat, amelyek túlélték szemétgyűjtő mozog a régebbi szegmenshatáron.

Mivel generációs 2 egység span több szegmenst, a tárgyakat, hogy estek a generációs 2, lehet mozgatni a régebbi szegmensben. A túlélő tárgyak generáció 1. és 2. lehet mozgatni, hogy egy másik szegmens, mivel költözött generációs 2.

Annak megállapításához, hogy egy tárgy használunk, a szemétgyűjtő a következő információkat használja.

A gyökerek a verem. Stack változók által biztosított JIT-fordító és eszközei megkerülve a verem.

Kezeli szemétgyűjtés. -Leírások, amelyek jelzik a kezelt objektumok, és amely lehet izolálni, a felhasználói kódot vagy a CLR.

Statikus adatokat. A statikus objektumok egy alkalmazási területen, ami utalhat más tárgyakat. Minden alkalmazási területen biztosítja a statikus objektumokat.

Megkezdése előtt a közgyűlés az összes kezelt hulladékáramok eltérő patak, futás a szemétgyűjtő fel van függesztve.

Az alábbi ábrán az áramlás, kiváltó szemétgyűjtő okozva a szuszpenziót a másik forrásból.

Alapjai szemétgyűjtő

A patak fut szemétgyűjtő

Kapcsolódó cikkek