Programmeerimiskeeltes võib objekt oma eksistentsi ajal muutuda ainult siis, kui selle hetkeseks muutmist ei saa. Seega ei saa sama mäluelementi uutele väärtustele omistada, seega on kasutamata alade haldamiseks vaja mingisugust automatiseeritud mäluhaldust. Neid kasutamata ruume nimetatakse prügiks ja kogu tõhusa mäluhalduse protsessi nimetatakse prügiks.
Prügivedaja peamine eesmärk on eraldada surnud esemed elusatest esemetest ja taaskasutusruum tagasi saada. Põhimõtteliselt töötab kogu asi hallatud hunnikus, mis pole midagi muud kui mäluplokk ja prügikoguja kontrollib perioodiliselt hunniku mälu, et mälu uutele objektidele eraldada. Haldamata ressursside, näiteks failide ja andmebaasiühenduste vabastamiseks on kaks meetodit: käsutada ja lõpule viia.
See artikkel aitab teil mõista nende kahe erinevust.
Kõrvaldamine on tavapärane viis, kuidas kasutajad saavad käskida objektidel oma ressursid vabastada ja mitte proovida objektidele uuesti juurde pääseda. Kõrvaldamismeetod võimaldab juhtida mälu selget puhastamist, muutes objektid kasutamiskõlbmatuks.
Kui kasutajad nimetavad meetodit Dispose (), vabastab objekt eeldatavasti kõik oma kallid ressursid, muutes selle taaskasutamiseks kättesaadavaks. Prügivedu ei kutsu seda kunagi üles ja see tuleb mängu alles siis, kui hallatud mälu napib. Spetsiaalse liidese nimega “IDisposable” abil otsustatakse, kus ja kuidas Dispose () rakendada. Kuid mis juhtub siis, kui käsutamismeetodit ei kutsuta?
Kui utiliseerimismeetodit ei kutsuta, on varuplaan kasutada puhastamiseks meetodit Lõpeta (). Prügivedaja kutsub ressursi lõpliku puhastamise läbi enne, kui see mälu vabastab. Õigeaegse puhastamise kontseptsioon muutub siin kohaldamatuks, kuna selle asemel, et mälu kohe eraldada, lisatakse objekt lõplikustamise järjekorda alles hiljem hävitamiseks. Lõplik vormistamine sarnaneb rohkem programmeerimisvea korral kasutusele võetud kaitsemeetmega ja utiliseerimine ei puhasta ressursse - sel juhul kutsub prügikoguja välja viimistlema () meetodi, et eemaldada kättesaamatud objektid mis tahes järjekorras..
Käitlemismeetodit kutsutakse haldamata ressursside, näiteks andmebaasi käepidemete, failide käepidemete, semafooride ja muude opsüsteemi eraldatud objektide vabastamise kiirendamiseks. Kõrvaldamismeetodit kasutatakse selleks, et käivitada kood, mis on vajalik kasutamata mälu ja nappide ressursside (nt GDI käepidemed) puhastamiseks. Lihtsamalt öeldes pakub dispositsioonimeetod mälu selge puhastamise kontrolli. Lõpetamismeetod on seevastu osa prügikoristusest, mida kasutatakse objekti lõpliku puhastamise toimingul enne prügi kogumist. Lihtsustatult öeldes kutsutakse viimistlusmeetodit vabastama objekti haldamata ressursse enne selle hävitamist.
Kõrvaldamismeetodit saab ressursside käsitsemiseks selgesõnaliselt nimetada kasutajakoodi ja klassi järgi, mis meetodit rakendab. Kuid mälu ei saa vabastada enne, kui prügikoguja teostab puhastusprotsessi. Meetodit saab nimetada ka siis, kui objektile on veel muid viiteid. Lõplikku meetodit, vastupidi, saab prügikoguja kasutada alles pärast seda, kui ta on kindlaks teinud, et viimane mäluobjekti eksemplar on hävitatud ja objektile pole enam viiteid. Pärast viimistlusmeetodi täitmist eemaldatakse objekt hunniku mälust.
Objekti mälust eemaldamise protsessi nimetatakse utiliseerimismustriks, mida saab kasutada objektide jaoks, millel on juurdepääs haldamata ressurssidele, kuna prügikoguja ei suuda haldamata ressursse tagasi saada. Rakendatud on liides „IDisposable” koos täiendava utiliseerimise (Boolean) meetodiga, mis nõuab halduseta ressursside vabastamist. Lõpetamise meetod viiakse läbi siis, kui objekti eksemplar hävitatakse enne selle otsimist. See on mittedeterministlik meetod, mis toimub prügikoguja äranägemisel ja ei pruugi seda isegi esineda. Seda ei tohiks hallatavatel objektidel rakendada enne, kui see on äärmiselt vajalik.
Objektide viivitamatuks hävitamiseks on palju kiirem kasutada utiliseerimismeetodit. Destruktorid teisendatakse automaatseks meetodiks käitusel. Prügivedaja kutsub seda automaatselt välja, kui objekt ulatub ulatusest välja, mis juhtub tavaliselt siis, kui selle objekti eksemplar hävitatakse. Meetodi lõpuleviimise probleem on see, et see on mittedeterministlik, see pole kindel, millal taastada mälu, millele enam prügiveo kaudu ei viidata. Kuid see ei pruugi mälu kohe vabastada; tegelikult ei saa seda kunagi nimetada ja seda ei saa otseselt sundida.
Peamine erinevus dispositsioonimeetodite ja lõplike meetodite vahel on see, et esimene on deterministlik meetod, mis kõrvaldab objektid koheselt, kui neid enam ei kasutata, teine on mittedeterministlik meetod majandamata ressursside eraldamiseks, mis tähendab, et see on tagatismeetod mäluobjektide esinemisjuhud, kui need enne tehingu leidmist ulatusest välja jäävad. Alati on soovitatav kasutada utiliseerimismeetodit, kui see pole eriti vajalik.
Teisiti öeldes on lõplik vormistamine kaitseta, mis on loodud haldamata ressursside puhastamiseks, kui mingi programmeerimisvea korral ei saa käsutamismeetodit kasutada. Lõpetamismeetodit kutsub prügikoguja välja siis, kui mõni objekt hunniku mälust välja visatakse.