Ero sivun ”Automaattinen roskienkeräys” versioiden välillä

Wikipediasta
Siirry navigaatioon Siirry hakuun
[katsottu versio][katsottu versio]
Poistettu sisältö Lisätty sisältö
Ipr1 (keskustelu | muokkaukset)
Ipr1 (keskustelu | muokkaukset)
Ei muokkausyhteenvetoa
Rivi 1: Rivi 1:
'''Automaattinen roskienkeräys''' ({{k-en|garbage collection}}) tai '''roskankeruu''' tarkoittaa tietotekniikassa automaattista muistinhallintamekanismia. Siinä ''roskienkerääjä'' ({{k-en|garbage collector, GC}}) 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 (ohjelmointikieli)|Python]], [[Perl]] ja [[Ruby]].
'''Automaattinen roskienkeräys''' ({{k-en|garbage collection}}) tai '''roskankeruu''' tarkoittaa tietotekniikassa automaattista muistinhallintamekanismia. Siinä ''roskienkerääjä'' ({{k-en|garbage collector, GC}}) 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 (ohjelmointikieli)|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_(ohjelmointikieli)|C]] ja [[C++]] (tosin näissäkin roskienkeräimen käyttö on mahdollista erillisten kirjastojen avulla).
Vastakohtana roskienkeruulle on manuaalinen muistinhallinta, jossa ohjelmoijan tulee itse määritellä milloin aiemmin varattu muisti vapautetaan. Tällaisia kieliä ovat esimerkiksi [[C_(ohjelmointikieli)|C]] ja [[C++]].
Molemmissa on mahdollista käyttää ''referenssilaskentaa'' seuraamaan milloin varattu muisti voidaan vapauttaa.


== Edut ja haitat ==
== Edut ja haitat ==

Versio 6. helmikuuta 2017 kello 07.35

Automaattinen roskienkeräys (engl. garbage collection) tai roskankeruu tarkoittaa tietotekniikassa automaattista muistinhallintamekanismia. Siinä roskienkerääjä (engl. garbage collector, GC) 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ää referenssilaskentaa seuraamaan milloin varattu muisti voidaan vapauttaa.

Edut ja haitat

Ilmeinen ja merkittävä etu automaattisessa muistinhallinnassa on ohjelmien helpompi toteuttaminen.lähde?

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 (engl. overhead), 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 (engl. mark and sweep)
  • Pysähdy ja kopioi (engl. stop-and-copy)