„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
A szó és a zárójel közé space-t rakunk. A helyesírási hiba kijavítását pedig nem szokás visszavoni. :) |
Elírások, nyelvtani hibák, tipográfia javítása egy kicsit, sajnos nem volt időm végigolvasni az oldalt. |
||
6. sor:
* Meghatározni mely objektumok nincsenek már használatban
* Felszabadítani az általuk elfoglalt memóriát
Azáltal, hogy a fejlesztőknek nem kell
Napjainkban sok programnyelvnek része a szemétgyűjtő ([[C Sharp|C#]], [[Java (programozási nyelv)|Java]], scriptnyelvek), és vannak programnyelvek, amelyeket manuális memóriakezelésre terveztek, de van GC
=== Előnyök ===
Megszabadítja a programozót a memóriamenedzseléstől, így
* Dangling ("lógó") pointer
* Többszörös felszabadítás: a már felszabadított memóriát ismét felszabadítja a program
* Memóriaszivárgás (memory leak): a már nem használt memória lefoglalva marad, anélkül, hogy felszabadulna
22. sor:
== Nyomkövetés alapú szemétgyűjtés ==
A legelterjedtebb szemétgyűjtő módszer. Először meghatározza, mely objektumok elérhetőek, majd törli a megmaradtakat.
=== Egy objektum elérhetősége ===
Egy elérhető objektumot úgy definiálhatunk, mint egy program futása közben létrejött változót, amelyet elérhetünk közvetlenül, vagy egy másik objektumon keresztül. Ezen a módon kétféle objektumot
* Objektumok, amelyekről feltételezhetjük, hogy elérhetőek. Tipikusan azok az elemek tartoznak ide, amelyekre a ''call stack'' hivatkozik (azaz minden lokális változó és paraméter egy függvényben), illetve minden globális változó.
* Minden olyan objektum, amelyre egy másik, szintén elérhető objektum hivatkozik (formálisan az elérhetőség egy tranzitív lezárt).
Ez a megközelítés nem optimális, mivel azután, hogy egy objektumra nincs többé szükség, még sok idő telhet el, mire kikerül az adott hatókörből.
Különbséget teszünk ''szintaktikai szemét'' (amikor a program nem fér hozzá az objektumhoz) és ''szemantikai szemét'' (azok, amiket többé nem használ a program) között:
|