A programozási nyelvekben az objektum létezése során csak változó lehet, a megvalósítás után nem módosítható. Tehát ugyanazt a memóriacellát nem lehet hozzárendelni az új értékekhez, így valamilyen automatizált memóriakezelésre van szükség a fel nem használt helyek kezeléséhez. Ezeket a fel nem használt területeket szemetetnek nevezzük, és a hatékony memóriakezelés teljes folyamatát szemetes gyűjtésnek nevezzük.
A szemetesgyűjtő fő célja, hogy elválasztja az elhalt tárgyakat az élő tárgyaktól, és újból felhasználja a helyet. Alapvetően az egész a kezelt halomon működik, ami nem más, mint egy memóriablokk, és a szemetesgyűjtő rendszeresen ellenőrzi a halommemóriát, hogy memóriát rendeljen új objektumokhoz. A nem kezelt erőforrások, például a fájlok és az adatbázis-kapcsolatok felszabadításához két módszer létezik: ártalmatlanítás és véglegesítés.
Ez a cikk segít megérteni a kettő közötti különbséget.
A selejtezés egy szokásos módja annak, hogy a felhasználók megmondják az objektumoknak, hogy szabadítsák fel erőforrásaikat, és ne próbálják újra elérni az objektumokat. A selejtezési módszer az emlékezetes memória tisztításának vezérlését teszi lehetővé, az objektumokat használhatatlanná téve.
Amikor a felhasználók meghívják a Dispose () metódust, az objektumnak feltételeznie kell, hogy felszabadítja az összes drága erőforrását, lehetővé téve ezzel az újrafelhasználást. Soha nem hívja fel a szemetesgyűjtő, és csak akkor játszik játékban, amikor a kezelt memória szűkössé válik. Az „IDisposable” nevű speciális felületet használják annak eldöntésére, hogy hol és hogyan kell megvalósítani a Dispose () szoftvert. De mi történik, ha a megsemmisítési módszert nem hívják meg?
Ha a dispose metódust nem hívják meg, akkor a tartalék terv a Finalize () módszer használata a takarításhoz. A szemetesgyűjtő felhívja az erőforrások végső megtisztítását, mielőtt felszabadítanák a memóriát. Az időben történő tisztítás fogalma itt alkalmatlanná válik, mivel ahelyett, hogy a memóriát azonnal kiosztanák, az objektum csak a későbbi megsemmisítés céljából kerül hozzáadásra a véglegesítési sorhoz. A véglegesítés inkább egy programozási hiba esetén bevezetett védőeszköz, és a hulladékkezelés nem tisztítja meg az erőforrásokat. Ebben az esetben a véglegesítés () módszert a szemétszedő hívja fel, hogy bármilyen sorrendben eltávolítsa az elérhetetlen tárgyakat..
A Dispose metódust felhívják a nem kezelt erőforrások, például az adatbázis-kezelők, fájlkezelők, szemaforok és az operációs rendszer által kiosztott más objektumok felszabadításának felgyorsítására. A selejtezési módszer a nem használt memória és a szűkös erőforrások, például a GDI kezelőelemek tisztításához szükséges kód végrehajtásához indul. Egyszerűen fogalmazva: a dispose módszer biztosítja az explicit memóriatisztítás ellenőrzését. A véglegesítési módszer viszont a szemetesgyűjtés része, amelyet az objektum végső takarítási műveleteinek elvégzéséhez használnak, még mielőtt a szemetet összegyűjtik. Egyszerűen fogalmazva: a véglegesítési módszert felhívják egy objektum nem kezelt erőforrásainak felszabadítására, mielőtt elpusztulnának.
A diszpozíciós metódus kifejezetten meghívható a felhasználói kóddal és az erőforrások elhelyezésére szolgáló módszert végrehajtó osztálytal. A memóriát azonban nem szabad felszabadítani, amíg a szemetesgyűjtő elvégzi a tisztítási folyamatot. A metódus akkor is meghívható, ha az objektumra más hivatkozások is léteznek. Éppen ellenkezőleg, a véglegesítési módszert a hulladékgyűjtő csak akkor hívhatja elő, amikor megállapítja, hogy az utolsó memóriaobjektum-példány megsemmisült, és nincs több hivatkozás az objektumra. A véglegesítési módszer végrehajtása után az objektumot eltávolítják a halommemóriából.
Az objektumnak a memóriából való eltávolításának folyamatát disztribúciós mintának nevezzük, amelyet objektumokhoz lehet használni, amelyek kezeletlen erőforrásokhoz férnek hozzá, mert a hulladékgyűjtő nem képes visszamenteni a nem kezelt erőforrásokat. A „IDisposable” felület és egy további Dispose (Boolean) módszer kerül végrehajtásra, amely nem kezelt erőforrások felszabadítását kéri. A véglegesítési eljárást akkor hajtják végre, amikor egy objektum példánya megsemmisül az üzlethelyzet megosztása előtt. Ez egy nem-determinisztikus módszer, amely a hulladékgyűjtő belátása szerint megy végbe, és esetleg nem is fordul elő. A kezelt objektumokon csak akkor szabad végrehajtani, amíg ez rendkívül szükséges.
Sokkal gyorsabb az ártalmatlanítási módszer használata, mint a véglegesítés az objektumok azonnali megsemmisítésére. A pusztítókat automatikusan átalakítják a módszer véglegesítéséhez futási időben. A hulladékgyűjtő automatikusan meghívja, amikor az objektum kikerül a hatókörből, ami általában akkor történik, amikor az objektum példánya megsemmisül. A véglegesítési módszerrel kapcsolatos probléma az, hogy nem determinisztikus jelentése, nem biztos, hogy mikor kell visszaszerezni azokat a memóriákat, amelyekre már nem hivatkoznak a szemétszedés során. Előfordulhat azonban, hogy a memória nem szabad azonnal felszabadulni; valójában soha nem nevezhetjük meg, és nem szabad rá kényszeríteni.
A diszpozíciós és a véglegesítési módszerek közötti fő különbség az, hogy az előbbi olyan determinisztikus módszer, amely azonnal eldobja az objektumokat, amikor már nem használják, míg az utóbbi nemdeterminisztikus módszer a nem kezelt erőforrások elosztásához, azaz hátulról működő módszer a felszabadításhoz. memóriaobjektumpéldányok, amikor az üzletkötést megelőzően kiszűrik a hatókört. Mindig tanácsos a lerakási módszert alkalmazni a véglegesítésnél, kivéve, ha ez rendkívül szükséges.
Más szavakkal: a véglegesítés a nem kezelt erőforrások megtisztításához alkalmazott védintézkedés, ha valamilyen programozási hiba esetén a megsemmisítési módszert nem lehet meghívni. A véglegesítési módszert a hulladékgyűjtő hívja meg, amikor egy objektumot ki akarnak rúgni a halommemóriából.