Ohjelmointikielellä objektilla voi olla vain muuttuja sen olemassaolon aikana, sen jälkeen kun sitä ei voida muokata. Joten samaa muistisolua ei voida allokoida uusille arvoille, joten käyttämätöntä tilaa hallitakseen tarvitaan jonkinlainen automatisoitu muistinhallinta. Näitä käyttämättömiä tiloja kutsutaan roskiksi ja koko tehokkaan muistinhallinnan prosessia kutsutaan roskien keräilyksi.
Roskakorin päätarkoitus on erottaa kuolleet esineet elävistä esineistä ja ottaa tilaa uudelleenkäyttöön. Pohjimmiltaan koko asia toimii hallitussa kasassa, joka ei ole muuta kuin muistilohko, ja roskien kerääjä tarkistaa määräajoin kasan muistin varataksesi muistin uusille kohteille. Hallitsemattomien resurssien, kuten tiedostojen ja tietokantayhteyksien, vapauttamiseen on kaksi tapaa: Hävitä ja Viimeistele.
Tämä artikkeli auttaa sinua ymmärtämään ero näiden kahden välillä.
Hävittäminen on tavanomainen tapa, jolla käyttäjät voivat käskeä esineitä vapauttamaan resurssinsa eikä yrittämään käyttää objektia uudelleen. Hävitysmenetelmä tarjoaa nimenomaisen muistin puhdistuksen hallinnan tekemällä kohteista käyttökelvottomia.
Kun käyttäjät kutsuvat Dispose () -menetelmää, objektin on tarkoitus vapauttaa kaikki kalliit resurssit siten, että se on käytettävissä uudelleen käytettäväksi. Jätekeräilijä ei soita sitä koskaan, ja se tulee pelaamaan vasta, kun hallitussa muistissa on pulaa. Erityistä käyttöliittymää nimeltä “IDisposable” käytetään päättämään missä ja miten Dispose () toteutetaan. Mutta mitä tapahtuu, kun hävitysmenetelmää ei soiteta?
Jos hävitysmenetelmää ei kutsutaan, varaosuussuunnitelmana on käyttää loppusilauksen () menetelmää puhdistukseen. Jätekeräjä kutsuu sitä suorittamaan lopullinen resurssien puhdistus ennen muistin vapauttamista. Ajoitetun puhdistuksen käsitettä ei voida soveltaa tässä, koska sen sijaan, että muisti allokoitaisiin heti, objekti lisätään viimeistelyjonoon vain hävitettäväksi myöhemmin. Viimeistely on enemmän kuin tietoturva, joka otetaan käyttöön ohjelmointivirheen sattuessa, ja loppusijoitus ei puhdista resursseja. Tällöin jätteenkeräjä kutsuu viimeistelemään () -menetelmää poistamaan tavoittamattomat esineet mistä tahansa järjestyksestä..
Hävitysmenetelmää kutsutaan nopeuttamaan hallitsemattomien resurssien, kuten tietokannan kahvojen, tiedostokahvojen, semaforien ja muiden käyttöjärjestelmän allokoimien objektien, vapautusta. Hävitysmenetelmää käytetään suorittamaan koodi, joka tarvitaan käyttämättömän muistin ja niukkojen resurssien, kuten GDI-kahvojen, puhdistamiseen. Yksinkertaisesti sanottuna hävitysmenetelmällä voidaan hallita nimenomaista muistin puhdistusta. Viimeistelymenetelmä puolestaan on osa roskien keräystä, jota käytetään kohteen viimeiseen puhdistukseen ennen sen keräämistä. Yksinkertaisesti sanottuna, viimeistelymenetelmää kutsutaan vapauttamaan objektin hallitsemattomat resurssit ennen sen tuhoamista.
Hävitysmenetelmää voidaan kutsua nimenomaisesti käyttäjäkoodilla ja luokalla, joka menetelmää toteuttaa resurssien hävittämiseksi. Muistia ei kuitenkaan voida vapauttaa ennen kuin roskien kerääjä suorittaa puhdistusprosessin. Menetelmää voidaan kutsua, vaikka muita viittauksia objektiin olisi edelleen olemassa. Viimeistelymenetelmään päinvastoin, jätteiden kerääjä voi vedota vasta sen jälkeen, kun se on todennut, että viimeinen muistiobjektin ilmentymä on tuhottu eikä enää viittauksia objektiin ole. Kun viimeistelymenetelmä on suoritettu, objekti poistetaan kasan muistista.
Objektin hävittämistä muistista kutsutaan hävityskuvioksi, jota voidaan käyttää objekteihin, jotka käyttävät hallitsemattomia resursseja, koska roskien keräilijä ei pysty palauttamaan hallitsemattomia resursseja. ”IDisposable” -liittymä yhdessä ylimääräisen Dispose (Boolean) -menetelmän kanssa on toteutettu pyytämällä hallitsemattomien resurssien vapauttamista. Viimeistelymenetelmä suoritetaan, kun esineen esine tuhoutuu ennen sen jakamista. Se ei ole deterministinen menetelmä, joka tapahtuu jätteenkeräjän harkinnan mukaan ja jota ei välttämättä edes esiinny. Sitä ei pidä toteuttaa hallituissa kohteissa ennen kuin se on äärimmäisen välttämätöntä.
On paljon nopeampaa käyttää hävitysmenetelmää kuin viimeistelyä esineiden välittömään hävittämiseen. Destructors muunnetaan automaattisesti viimeistelemään menetelmä suorituksen aikana. Jätekeräjä käyttää sitä automaattisesti, kun esine poistuu laajuudesta, mikä tapahtuu yleensä silloin, kun kyseisen esineen esiintymä tuhoutuu. Viimeistelymenetelmän ongelmana on, että se ei ole deterministinen, joten ei ole varmaa, milloin palautetaan muisti, johon ei enää viitata roskien keräämisen kautta. Se ei kuitenkaan välttämättä vapauta muistia heti; itse asiassa sitä ei voida koskaan kutsua eikä sitä voida pakottaa nimenomaisesti.
Tärkein ero hävitys- ja viimeistelymenetelmien välillä on, että ensimmäinen on deterministinen menetelmä, joka hävittää objektit heti, kun niitä ei enää käytetä, kun taas jälkimmäinen on ei-deterministinen menetelmä hallinnoimattomien resurssien allokoimiseksi, mikä tarkoittaa, että se on tukiaseman menetelmä vapauttamiseksi muistiobjektin esiintymät, kun ne menevät ulkopuolelle ennen kaupankäyntiä. Aina on suositeltavaa käyttää loppusijoitusmenetelmää viimeistelyn aikana, ellei se ole välttämätöntä.
Toisin sanoen viimeistely on suojatoimenpide, joka on otettu käyttöön hallitsemattomien resurssien puhdistamiseksi, kun hävitysmenetelmää ei voida kutsua jonkin ohjelmointivirheen tapauksessa. Viimeistelymenetelmää kutsuu jätteen keräilijä, kun esine on aikeissa potkaista ulos kasa-muistista.