En søppelsamler er en implisitt minnehåndteringsmekanisme implementert i noen tolkede eller semi - tolkede programmeringsspråk .
Konseptet med søppelinnsamling ble oppfunnet av John McCarthy i 1958 for å unngå manuell minnehåndtering på Lisp -språket . [ 1 ]
Ethvert dataprogram bruker en viss mengde arbeidsminne som er gjort tilgjengelig for det av operativsystemet . Dette minnet må administreres av programmet selv for å:
Vanligvis har programmereren et kodebibliotek som tar seg av disse oppgavene. Det er imidlertid programmererens eget ansvar å bruke dette biblioteket riktig.
Dette har fordelen med effektiv minnebruk, dvs. minneplasser frigjøres når de ikke lenger er nødvendige. Denne eksplisitte minnestyringsmekanismen er imidlertid utsatt for feil. For eksempel kan en programmerer glemme å frigjøre minne slik at det før eller senere ikke er noe minne igjen, og avbryter kjøringen av programmet.
Som et alternativ er implisitt minnebehandling nødvendig , slik at programmereren ikke er klar over tildeling og frigjøring av minne. Dette kreves i noen programmeringsspråk der minnebegrepet ikke håndteres. For eksempel på deklarative språk som Lisp eller Prolog .
Når et språk har søppelinnsamling, trenger ikke programmereren å ringe en subrutine for å frigjøre minne. Minnetildeling er også mer eller mindre automatisk uten programmerers innblanding. For eksempel:
Når programmet er kompilert , inkluderes automatisk en søppeloppsamler - subrutine i programmet . Denne subrutinen kalles også med jevne mellomrom uten innblanding fra programmereren.
Søppelsamleren blir informert om alle minnetildelinger som forekommer i programmet. I tillegg bidrar kompilatoren til å gjøre det mulig å holde styr på alle referansene som finnes til en viss reservert minneplass.
Når søppelsamleren påkalles, går den gjennom listen over plassholdere og ser på referanseantallet for hver plassholder. Hvis en teller har nådd null betyr det at minneplassen ikke lenger brukes og derfor kan frigjøres.
Naturligvis bruker denne prosessen en viss tid hvor ingenting virkelig nyttig for formålet med programmet er gjort. Derfor kan den ikke påberopes for ofte.
Følgelig er den eneste ulempen med denne mekanismen å bestemme når søppelsamleren må kjøre. Det er flere algoritmer for å gjøre det, men den mest effektive er den første:
Fordelene og ulempene med denne minnestyringsmekanismen er det motsatte av den eksplisitte mekanismen:
Det er mulighet for å implementere søppelinnsamling som bare et annet kodebibliotek, men dette er generelt ikke tilfelle. Selve utformingen av visse programmeringsspråk gjør eksistensen av søppelsamleren nødvendig. For å implementere disse språkene, kreves to handlinger: