Hävitä ja viimeistele

Anonim

Ohjelmointikielissä objektilla voi olla vain muuttuja sen olemassaolon aikana, mutta instantiation jälkeen sitä ei voi muokata. Samaa muistisolua ei voida kohdistaa uusiin arvoihin, joten käyttämätöntä tilaa hallitaan jonkinlaisella automaattisella muistinhallinnalla. Näitä käyttämättömiä tiloja kutsutaan roskiksi ja koko prosessin tehokas muistienhallinta on nimeltään roskakokoelma.

Jätekerääjän päätavoite on erottaa kuolleet esineet elävistä esineistä ja palauttaa tilaa uudelleenkäyttöön. Pohjimmiltaan koko asia toimii hallittuna kasassa, joka ei ole muuta kuin muistilohko ja roskakerääjä tarkistaa säännöllisesti kasa muistin jakamaan muistiin uusia esineitä. On kaksi tapaa vapauttaa hallitsemattomia resursseja, kuten tiedostoja ja tietokantayhteyksiä: Hävitä ja viimeistele.

Tämä artikkeli auttaa sinua ymmärtämään näiden kahden välistä eroa.

Mikä on hävitysmenetelmä?

Hävitä on tavallinen tapa, jolla käyttäjät voivat kertoa esineistä vapauttamaan resurssejaan eikä yrittää käyttää objekteja uudelleen. Hylkäämismenetelmä mahdollistaa nimenomainen muistin puhdistuksen tekemisen tekemällä objekteja käyttökelvottomaksi.

Kun käyttäjät kutsuvat Dispose () -menetelmän, kohteen on tarkoitus vapauttaa kaikki sen kalliit resurssit, jolloin se on käytettävissä uudelleenkäyttöä varten. Jätekerääjä ei koskaan kutsuta sitä, vaan se pelataan vain, kun hallittua muistia tulee vähäiseksi. Erityisen käyttöliittymän nimeltä "IDisposable" käytetään päättää missä ja miten toteuttaa Dispose (). Mutta mitä tapahtuu, kun hävittämismenetelmää ei saada kutsumaan?

Mikä on viimeistelymenetelmä?

Jos hävittämismenetelmää ei saada kutsua, varasuunnitelmana on käyttää Finalize () -menetelmää puhdistusta varten. Jätekerääjä kutsuu sen tekemään lopullisen resurssien puhdistuksen ennen kuin se vapauttaa muistia. Aikaisen puhdistuksen käsite ei ole sovellettavissa täällä, koska sen sijaan, että muisti hajotettaisiin välittömästi, kohde lisätään viimeistelyjonoon vain tuhotakseen myöhemmin. Viimeistely on enemmän kuin turvatarkistus, joka on otettu käyttöön ohjelmavirheen sattuessa, eikä hävittäminen siivoa resursseja, jolloin jätehuoltojärjestelmä kutsuu Finalize () -menetelmän poistamaan tavoittamattomat kohteet missä tahansa järjestyksessä.

Hävitä ja viimeistele

Hävitä ja viimeistele

Hävitysmenetelmää kutsutaan nopeuttamaan hallitsemattomien resurssien, kuten tietokannan kahvat, tiedostojen käsittelyt, semaforit ja muut käyttöjärjestelmän varatut kohteet. Hävittämismenetelmää kutsutaan koodin suorittamiseksi, jota tarvitaan käyttämättömän muistin ja niukkojen resurssien, kuten GDI-kädensijoiden, puhdistamiseen. Yksinkertaisilla termeillä hävittää menetelmä tarjoaa valvonnan nimenomainen muistin puhdistus. Toisaalta viimeistelymenetelmä on osa jätteiden keräämistä, jota käytetään lopullisen puhdistusoperaation suorittamiseen esineessä, ennen kuin se kerätään talteen. Yksinkertaisesti sanottuna viimeistelymenetelmä kutsutaan vapaaksi hallitsemattomista resursseista, joita esinettä hallitaan ennen kuin se tuhoutuu.

Hävittäminen ja viimeistely

Hävitä menetelmä voidaan kutsua eksplisiittisesti käyttäjäkoodilla ja luokalla, joka toteuttaa menetelmän resurssien hävittämiseksi. Muistia ei kuitenkaan voida vapauttaa, ennen kuin roskakerääjä suorittaa puhdistusprosessin. Menetelmää voidaan kutsua vaikka muita viittauksia kohteeseen olisi vielä olemassa. Päinvastoin, viimeistelymenetelmä voidaan kutsua roskakerääjälle vasta sen jälkeen, kun se toteaa, että viimeinen muistiympäristöesimerkki tuhoutuu eikä enää ole olemassa viittauksia kohteeseen. Kun viimeistelymenetelmä on suoritettu, kohde poistetaan kasanmuistista.

Hävittäminen ja viimeistely

Prosessin sijoittaminen muistista kutsutaan hävittämiskuvaksi, jota voidaan käyttää kohteille, jotka käsittelevät hallitsemattomia resursseja, koska roskakerääjä ei pysty palauttamaan hallitsemattomia resursseja. "IDisposable" -rajapinta ja lisäksi Hävitä (Boolean) -menetelmä on toteutettu, jossa pyydetään vapauttamattomia resursseja. Lopetusmenetelmä suoritetaan, kun esineen osa tuhotaan ennen sen jakamista. Se on ei-deterministinen menetelmä, joka tapahtuu jätevaraston harkinnan mukaan ja ei edes voi tapahtua.Sitä ei pitäisi toteuttaa hallinnoiduissa kohteissa äärimmäisen tarpeelliseksi.

Hävittäminen ja viimeistely

On paljon nopeampaa käyttää hävittämismenetelmää sen sijaan, että se viimeistelisi kohteiden välittömän hävittämisen. Destruktorit muunnetaan automaattisesti viimeistelymenetelmiksi ajon aikana. Jätekerääjä kutsuu sen automaattisesti, kun esine menee ulos soveltamisalasta, mikä tavallisesti tapahtuu, kun esineen kyseinen esitys tuhoutuu. Ongelma viimeistelymenetelmänä on se, että se ei ole deterministinen merkitys, sillä ei ole varmaa, milloin palautetaan muistia, jota ei enää viitata roskatasolla. Se ei kuitenkaan vapauta muistia välittömästi; Itse asiassa sitä ei voi koskaan kutsua eikä sitä voida pakottaa nimenomaisesti.

Dispose vs. Finalize: vertailukuvio

Yhteenveto Dispose vs. Finalize

Suurin ero hävittämis- ja viimeistelymenetelmien välillä on se, että ensimmäinen on deterministinen menetelmä, joka välittömästi luovuttaa esineitä, kun niitä ei enää käytetä, kun taas jälkimmäinen on epädeterministinen menetelmä hallitsemattomien resurssien allokoimiseksi eli se on backstop-menetelmä vapauttaa muistiobjektin esityksiä, kun ne menevät soveltamisalan ulkopuolelle ennen niiden jakamista. On aina suositeltavaa käyttää hävittämismenetelmää viimeistelyn yli, ellei se ole äärimmäisen välttämätöntä.

Toisin sanoen viimeistely on suojatoimenpide, jonka avulla voidaan puhdistaa käsittelemättömiä resursseja, kun hävittämismenetelmää ei voida kutsua ohjelmointivirheen sattuessa. Jätekerääjä kutsuu viimeistelymenetelmän, kun esine on parhaillaan irti kasan muistista.