U programskim jezicima objekt može imati promjenjivu samo tijekom svog postojanja, nakon što ga instancija ne može mijenjati. Tako se istoj memorijskoj ćeliji ne može dodijeliti nove vrijednosti, pa je za upravljanje neiskorištenim prostorima potrebno neka vrsta automatiziranog upravljanja memorijom. Ti neiskorišteni prostori nazivaju se smećem, a cijeli postupak učinkovitog upravljanja memorijom naziva se smeće.
Glavni cilj sakupljača smeća je odvajanje mrtvih predmeta od živih objekata i ponovno prikupljanje prostora za ponovnu upotrebu. U osnovi, cijela stvar radi na upravljanoj hrpi, što nije ništa drugo nego blok memorije, a sakupljač smeća povremeno provjerava memoriju gomile kako bi dodijelio memoriju novim objektima. Postoje dvije metode za oslobađanje neupravljanih resursa poput datoteka i veza s bazom podataka: Dispose and Finalize.
Ovaj vam članak pomaže da shvatite razliku između to dvoje.
Dispose je standardni način da korisnici kažu objektima da oslobode svoje resurse i da više ne pokušavaju pristupiti objektima. Način odlaganja omogućava kontrolu eksplicitnog čišćenja memorije čineći objekte neupotrebljivim.
Kad korisnici pozovu metodu Dispose (), objekt bi trebao osloboditi sve svoje skupe resurse i učiniti ih dostupnim za ponovnu upotrebu. Sakupljač smeća nikada ga ne zove koji dolazi u igru samo kad uspijeva uspomena. Posebno sučelje pod nazivom „IDisposable“ koristi se za odlučivanje gdje i kako implementirati Dispose (). Ali što se događa kad metoda zbrinjavanja ne bude pozvana?
Ako se metoda zbrinjavanja ne dobije, rezervni plan je koristiti Finalize () metodu za čišćenje. Zvao ga je sakupljač smeća kako bi izvršio konačno čišćenje resursa prije nego što oslobodi memoriju. Koncept pravovremenog čišćenja postaje ovdje neprimjenjiv, jer umjesto da se memorija odmah dodijeli, objekt se dodaje u red za finaliziranje, da bi kasnije bio uništen. Finalize je više poput zaštitnog programa koji se postavlja u slučaju greške u programiranju, a odlaganje ne čisti resurse. U tom slučaju sakupljač smeća poziva metodu Finalize () da ukloni nedostupne predmete bilo kojim redoslijedom.
Naziva se metoda odlaganja kako bi se ubrzalo oslobađanje neupravljanih resursa kao što su ručke baze podataka, ručke datoteka, semafore i drugi objekti dodijeljeni u operacijskom sustavu. Način odlaganja poziva se na izvršavanje koda potrebnog za čišćenje neiskorištene memorije i oskudnih resursa poput GDI ručki. Jednostavno rečeno, način odlaganja osigurava kontrolu eksplicitnog čišćenja memorije. Metoda dovršavanja, s druge strane, dio je skupljanja smeća koja se koristi za obavljanje završnih operacija čišćenja na objektu prije nego što se skuplja smeće. Jednostavno rečeno, metoda finalizacije poziva se na oslobađanje neupravljanih resursa koje objekt posjeduje prije nego što se on uništi.
Metoda raspolaganja može se izričito pozvati korisničkim kodom i klasom koja implementira metodu raspolaganja resursima. Međutim, memorija se ne može osloboditi dok sakupljač smeća ne provede postupak čišćenja. Metoda se može nazvati čak i ako postoje druge reference na objekt. Metoda finalizacije, naprotiv, sakupljač smeća može pozvati tek nakon što utvrdi da je posljednja instanca memorijskog objekta uništena i da nema više referenci na objekt. Nakon izvršene metode finalizacije, objekt se uklanja iz hrpe memorije.
Postupak uklanjanja objekta iz memorije naziva se uzorkom raspolaganja, koji se može koristiti za objekte koji pristupaju neupravljanim resursima jer sakupljač smeća ne može povratiti neupravljane resurse. Sučelje „IDisposable“ zajedno s dodatnom metodom Dispose (Boolean) implementira se s ciljem oslobađanja neupravljanih resursa. Metoda dovršetka izvršava se kada se instanca objekta uništi prije njegove razmještanja. To je nedeterinistička metoda koja se događa po nahođenju sakupljača smeća i može se uopće ne pojaviti. Ne smije se provoditi na upravljanim objektima dok nije krajnje nužno.
Mnogo je brže koristiti metodu zbrinjavanja, a ne dovršiti za trenutno zbrinjavanje predmeta. Destruktori se automatski pretvaraju u postupak finalizacije u vrijeme izvođenja. Aparat za prikupljanje smeća automatski se poziva kada objekt izađe iz područja primjene, što se obično događa kada je instancija tog objekta uništena. Problem s metodom finaliziranja je u tome što nije nedeterminističko, što znači da nije sigurno kada treba povratiti memoriju koja se više ne referencira kroz odvoz smeća. No, memorija se možda neće odmah osloboditi; u stvari, to se nikada ne može nazvati i ne može se izričito forsirati.
Glavna razlika između metoda raspolaganja i finalizacije je ta što je prva metoda determinirana koja trenutno raspoređuje objekte kada se više ne koriste, dok je druga nedeterministička metoda za raspodjelu neupravljanih resursa, što znači da je metoda povratnog oslobađanja slučajevi memorijskog objekta kada prije razmještanja izlaze iz dosega. Uvijek je preporučljivo koristiti metodu zbrinjavanja tijekom dovršetka, osim ako nije krajnje nužno.
Drugim riječima, finalizacija je zaštitno sredstvo koje se postavlja radi čišćenja neupravljanih resursa kad se metoda odlaganja ne može pozvati u slučaju neke programske pogreške. Metoda dovršetka naziva se sakupljačem smeća kad će se neki predmet izbaciti iz memorije.