A szemétgyűjtő - ez
terminológia
A szempontból a magyar nyelv pontosabban már hívott módszer nem „össze” és a „szemétgyűjtő”. [1] Azonban a magyar nyelv állandó ez a „szerelvény”.
A szemétgyűjtő a köznyelvben néha „szemétgyűjtő”.
A szemétgyűjtés használta először Dzhonom Makkarti 1959 programozási környezetben kifejlesztett funkcionális nyelv Lisp programozási. Később már más, elsősorban a programozási nyelvek és operációs rendszerek - funkcionális és logikus. Annak szükségességét, hogy szemétgyűjtő nyelvén ilyen típusú annak a ténynek köszönhető, hogy a szerkezet a következő nyelveken teszi, hogy nagyon kényelmetlen nyomkövető élettartama memóriában lévő objektumok és manuális kezelését is. Széles körben használják a következő nyelveken és listák alapján ezeket a komplex adatstruktúrák, míg a programokat folyamatosan létre, épülnek, expandált, másolni, és pontosan meghatározni az időt eltávolításának egy tárgy nehéz.
Az ipari eljárási és az objektum nyelvű szemétgyűjtő nem használták sokáig. Előnyben kapott utasítás memória kezelése hatékonyabb és kiszámíthatóbb. De a második felében a 1980-as, szemétgyűjtő technológia használata a döntéshozatalban, és az objektum-alapú programozási nyelv. Ez a jelenleg használt több nyelven, különösen Oberon. Python, C #, D, és más nyelveken.
utasítás memória problémák
Hagyományos politikai nyelv memória kezelése módszer utasítás. Ennek lényege a következő:
- Ahhoz, hogy hozzon létre egy objektumot a kupac programozó kifejezetten felkéri memóriafoglalási parancsot. Ez a parancs visszaad egy pointert a lefoglalt memória terület, amely tárolja és használt hozzáférni.
- Mindaddig, amíg a létrehozott objektum szükséges a program, a program fér át egy korábban mentett pointer.
- Ha nincs tárgy elhalad, a programozó kifejezetten felkéri felszabadítása parancsot, átadva neki a mutató egy törölt objektum.
Bármilyen nyelven, megengedi a tárgyat a kupac, esetleg két lehetséges problémák: Függő linkek (angol lógó pointer). És memóriavesztés (angol memóriavesztés.).
Függő linkek
A megjelenése lóg kapcsolatok általában a következménye téves értékelésére az objektum életét: a programozó meghívja a parancsot, hogy törölje az objektum felhasználása előtt leáll.
memóriavesztés
Szemétgyűjtő mechanizmus
alapelvek
Szemétgyűjtés - olyan technológia, amely lehetővé teszi, egyrészt, hogy egyszerűsítse a programozás, a megtakarítás a programozó, hogy manuálisan törölni létrehozott objektumok a kupac, a másik -, hogy megszüntesse okozta helytelen utasítás hiba memóriát.
A rendszer szemétgyűjtő vámmentes memóriát a tárgyak, amelyek már nem használják, van rendelve a program végrehajtási környezetet. A programozó létrehoz egy dinamikus objektumokat, és használja őket, nem tud vigyázni eltávolítja a tárgyat, ahogyan azt neki szerdán. Végrehajtására vonatkozó szemétgyűjtő a végrehajtási környezet tartalmaz egy speciális szoftver modul az úgynevezett „szemétgyűjtő”. Ez a modul időközönként fut, meghatározza, hogy mely létrehozta a már nem használt, és felszabadítja a memóriát foglal el őket a kupac tárgyakat.
GC startfrekvencia határozza meg a rendszer funkcióit. Collector fut a háttérben, induló program, amikor inaktív (például amikor a program tétlen, várakozás felhasználói input). A szemétgyűjtő fut biztosan megszakítaná a program végrehajtását, ha a következő művelet memóriafoglalási nem lehet annak a ténynek köszönhető, hogy minden rendelkezésre álló memória kimerül.
Bár általában lehetetlen pontosan meghatározni, ha az objektum használták utoljára, és már nincs szükség, szemetesek használja Óvatos becslések meghatározására, hogy a tárgy a jövőben garantáltan nem használható.
megközelíthető tárgyak
Normális esetben a feltétel, hogy az objektum még mindig használatban van, az, hogy link mutat rá. Ha nincs több utalás az objektumot, akkor nyilvánvalóan nem lehet a program által használt, és ezért el kell hagyni. Ez a kritérium által használt legmodernebb szemetesek nevezett több elérhető tárgyakat.
Informális, akkor adja meg a következő rekurzív definíció elérhető objektum:
Egy ilyen meghatározás nem elméletileg valamint a számos elérhető szerint neki is vannak tárgyak, amelyek soha nem lehet használni, de amelyek még nem léteznek linkeket. Az optimális lenne tekinthető egy elérhetetlen cél, amely során a további munka program nem lehet egyetlen kezelés, de azonosítása ilyen helyek nem lehetséges, mivel csökken eldönthetetlen probléma, hogy állítsa le (elég azt feltételezni, hogy egy objektum X fogják használni, akkor és csak abban az esetben, ha a program sikeres P).
Egy egyszerű algoritmus meghatározására elérhető tárgyak, „algoritmus jelek» (Mark és Sweep), az alábbiak szerint:
Egy másik változata az algoritmus meghatározására elérhetőség - a szokásos referencia számlálást. Ennek használata késlelteti hozzárendelés műveletek kapcsolatokat, de a meghatározása elérhető tárgyak triviális - minden tárgyat, az érték a referencia száma nagyobb, mint nulla. További részletezés nélkül, ez az algoritmus, ellentétben az előzővel, nem távolítja el a ciklikusan zárt láncot elavult tárgyak hivatkozást tartanak egymással.
szemétgyűjtő stratégia
Miután meghatároztuk a készlet elérhetetlen tárgyak, a szemétgyűjtő visszaigényelhetik a memória által elfoglalt őket, és a többit hagyja, ahogy van. Ön is tegye a szabad memória mozogni egészét vagy egy részét a fennmaradó tárgyak más memória területek, frissítése egyidejűleg, minden utalást rájuk. Ez a két megoldás nevezzük, sorrendben, és mozgassa a mozdíthatatlan.
Mindkét stratégia vannak előnyei és hátrányai:
Ez az arány a kiosztás és felszabadítása- Mozdíthatatlan szemétgyűjtő gyorsan felszabadítja a memóriát (mivel ez a művelet vezet a megfelelő memória blokkok címkézés mind ingyenes), de több időt tölt vele választás (mert a memória szegmentált és elosztására kell találni a memóriakártya kívánt mennyiségű, megfelelő méretű blokkok).
- Mozgó kollektor igényel viszonylag több időt a színpadon szemétgyűjtő (töltött több időt a memória töredezettségét, és módosíthatja az összes utalást a lebegő tárgy), de a mozgás a rendkívül egyszerű és gyors (Kb) (1) algoritmus memóriafoglalási. Amikor töredezettségmentesítés mozgatására, és így elválasztjuk a teljes memória két nagy területek - elfoglalt és lakatlan volt, tárolja a mutatót a határon. Jelölje ki az új memória kell csak mozgatni a határ, visszatérve a darab elejétől szabad memória.
erőművek
Mivel a gyakorlat azt mutatja, az újonnan létrehozott objektumok egyre elérhetetlen, mint a tárgyakat, hogy létezik sokáig. E törvény szerint, sok modern szemetesek vannak osztva az összes objektum néhány generáció - egy sor tárgy egy közeli életre. Amint a lefoglalt memória az egyik generáció, akkor véget ér ez a generáció, és minden további „fiatal” keresi elérhetetlen tárgyakat. Mindegyikük eltávolítjuk, és a maradék át az „idősebb” generáció.
A generációk csökkenti szemétgyűjtő ciklus számának csökkentése nézve az összeszerelési tárgyakat, de ez a módszer a futási nyomkövető linkek generációk között.
Nyelvi követelmények és a rendszer
Így a program használata szemétgyűjtő, szükséges, hogy megfelel számos feltételnek nyelvére vonatkozó működési idő és a legtöbb feladatot.
használja problémák
Ellentétben a gyakori előfordulása, létezése a szemétgyűjtő nem mentesíti a programozó az összes memóriát irányítási problémák.
Előnyök és hátrányok
Összehasonlítva kézi memóriakezelés, szemétgyűjtés biztonságosabb, mivel megakadályozza, hogy a memória szivárgás és holt link miatt korai eltávolítása tárgyakat. Egy másik pozitív dolog - egyszerűsítésére a programozási folyamatot. Mint már említettük, a programozó nem teljesen figyelmen kívül hagyja a memória kezelése kérdés jelenlétében szemétgyűjtő, de a költség a memória kezelése ebben az esetben továbbra is lényegesen alacsonyabb.
Azonban sok esetben a szemétgyűjtő rendszer mutatnak alacsonyabb hatékonyság, mind a sebesség és a memória használat (ami elkerülhetetlen, mert a szemétgyűjtő erőforrásokat igényel, és szükség van némi szabad memória felesleges normál működés).
Memóriakezelés specifikus nyelvek és rendszerek
A szemétgyűjtés gyakran szembe kézi memóriakezelés, amelyben a programozó kifejezetten meghatározza, hogy mikor és mely területeken memória kell engedni. Vannak azonban olyan nyelv, amely felhasználja a kettő kombinációja memória kezelési technikák, valamint vannak más technológiákat, hogy megoldja az azonos alapvető probléma (például hu: régió következtetés).
Néhány programozási nyelvek használata szükséges szemétgyűjtő mechanizmus szerint a specifikáció (C #), a másik - a hatékonyság miatt a végrehajtás (pl formális nyelvek a lambda-kalkulus) - Ezeket a nyelveket nevezzük nyelvek szemétgyűjtés. Sok nyelvek szemétgyűjtő nincs lehetőség explicit kézi eltávolítása tárgyak (például a delete operátor), ahol az esemény lóg referenciák kizárt elvileg, és a szemétgyűjtő csak foglalkozik eltávolítása tárgyak, amelyek nem hivatkozott a program.
Néhány nyelv (például Modula-3), akkor használja a kézi memóriakezelés és a szemétgyűjtő egy alkalmazás - két különálló cölöpök.