„Szemétgyűjtés” változatai közötti eltérés

[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
Luckas-bot (vitalap | szerkesztései)
BinBot (vitalap | szerkesztései)
49. sor:
 
=== Alapvető algoritmusok ===
A nyomkövetés alapú szemétgyűjtő nevét a munkamódszeréről kapta, mivel folyamatosan figyeli a program által használt memóriát, kutatva a szemét után. A gyűjtő ciklikusan működik, mindig akkor „kapcsol be”, amikor a program erőforrásszűkében van. Az eredetileg használt eljárás egy '''naívnaiv''' ''jelöld meg és söpörd ki'' '''(mark-and-sweep)''' metódus alapján kiválasztja a felesleges elemeket. Ezzel a módszerrel a program futása során többször is végigmegy a felhasznált memórián.
 
Ebben a metódusban minden egyes objektum kap egy jelzést'''(flag)''' (tipikusan egy [[bit]] hosszúságú), amelyet csakis a szemétgyűjtő használ. Ez a '''flag''' mindig törölt állapotban van, kivéve a gyűjtő ciklusa alatt. A GC először kitakarítja a valószínűleg elérhető elemek ('''root set''' – a call stack és a lokális elemek) listáját, és minden használatban lévő objektumot megjelöl. Minden olyan elem, amelyre van hivatkozás a root set-ből szintén jelölést kap. Végül ismét végignézi az összes elemet: ha az objektum flagje alapállapotban van, akkor törlésre kerül, ellenkező esetben visszaáll az eredeti helyzetbe, hogy felkészüljön a következő ciklusra.