Automaattinen roskienkeräys

Automaattinen roskienkeräys () tai roskankeruu tarkoittaa tietotekniikassa automaattista muistinhallintamekanismia. Siinä roskienkerääjä () pyrkii poistamaan automaattisesti muistista tiedot, joihin sovellus ei tule enää viittaamaan, ja vapauttamaan niiden käyttämän muistitilan uudelleen käytettäväksi. Roskienkeruun keksi John McCarthy vuoden 1959 aikoihin kehittäessään Lisp-ohjelmointikieltään. Lisp-murteiden lisäksi roskienkeruuta käyttävät esimerkiksi Java, OCaml, Python, Perl ja Ruby.

Vastakohtana roskienkeruulle on manuaalinen muistinhallinta, jossa ohjelmoijan tulee itse määritellä milloin aiemmin varattu muisti vapautetaan. Tällaisia kieliä ovat esimerkiksi C ja C++.
Molemmissa on mahdollista käyttää viitelaskentaa seuraamaan milloin varattu muisti voidaan vapauttaa.

Useissa olio-ohjelmointikielissä muistin varaus tehdään olion konstruktorissa ja muistin vapauttaminen sen destruktorissa (RAII, ).Stroustrup, Bjarne 2015: The C++ Programming Language, 4th ed: kpl13, s. 343–387 Tällöin roskienkeruumenetelmälle ei ole tarvetta.

Vastakohtana ajonaikaiselle roskienkeruulle on kehitetty käännösaikainen roskienkeruu staattisen analyysin avulla kuten Mercury-kielelle.

 Edut ja haitat 
Ilmeinen ja merkittävä etu automaattisessa muistinhallinnassa on ohjelmien helpompi toteuttaminen.

Monet virheet ohjelmissa liittyvät muistinhallintaan, esimerkiksi viittaaminen muistialueeseen joka on jo vapautettu tai viittaaminen muistialueeseen jota ei ole varattu. Molemmissa tapauksissa muistialue voi sisältää epävalidia dataa, joka voi aiheuttaa virhetoiminnon.

Haittana on taas roskienkeruusta johtuva jätekuorma (), joka voi joskus olla ongelma. Roskienkeräys on usein aikaa vievä operaatio, jossa kaikki ohjelman muistiviittaukset käydään läpi, ja tämä saattaa viedä jopa sekunteja. Käyttämällä manuaalista muistinhallintaa ohjelmoija voi suunnitella koodin optimaaliseksi muistinhallinnan osalta, koska hän saattaa tietää tarkoin missä vaiheessa muistia tarvitaan milläkin hetkellä.

Mekanismit
Roskienkeruuseen on erilaisia algoritmeja, jotka eroavat toisistaan tehokkuudeltaan ja monimutkaisuudeltaan. Useiden muiden algoritmien tapaan yksinkertaiset roskienkeruun toteutukset ovat keskimäärin tehokkuudeltaan heikompia kuin monimutkaiset.

Merkitse ja pyyhi ()
Pysähdy ja kopioi ()

 Käyttökohteet 
Roskienkeruuta käytetään pääasiassa ohjelman varaaman muistin vapauttamiseen. Roskienkeruu ei koske asioita kuten verkko- ja tiedostokahvoja, graafisen käyttöliittymän komponentteja ja niin edelleen.

 Lähteet 

Luokka:Ohjelmointi
Luokka:Käyttöjärjestelmätekniikka