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.
A patak fut szemétgyűjtő