Garbage collection: Porovnání verzí

Smazaný obsah Přidaný obsah
Addbot (diskuse | příspěvky)
m Bot: Odstranění 29 odkazů interwiki, které jsou nyní dostupné na Wikidatech (d:q322202)
m tzpo
Řádek 13:
# Vrácení zdrojů, kde se vyskytovaly nalezené objekty
 
Uvolňování paměti garbage collecting osvobozuje prográmatoraprogramátora od uvolňování objektů, které již dále nejsou zapotřebí, což ho většinou stojí značné úsilí. Je to vlastně pomůcka pro stabilnější program, protože zabraňuje některým třídám provozních chyb. Například zabraňuje chybám ukazatelů, které ukazují na již nepoužívaný objekt, nebo který je již zrušen a tato paměť se dále k ničemu nevyužívá.
 
Mnohé jazyky vyžadují garbage collectory už ve specifikaci jazyka ([[Java (programovací jazyk)|Java]], [[C Sharp|C#]]), nebo až v praktické realizaci(Garbage collected jazyky). Další jazyky jako [[C]],[[C++]] jsou určeny pro manuální správu paměti, garbage collector je ale možno ručně napsat. Verze garbage collectoru v [[Delphi]] pracuje s dynamickými poli, dlouhými řetězci(long string) a rozhraními.
Řádek 32:
 
=== Kopírovací (copying) collector ===
Tento algoritmus nejprve rozdělí prostor na haldě na dvě části, kdy jedna je aktivní a s druhou se nepracuje. Vždy můžeme alokovat objekty v celkové velikosti, která je poloviční velikost haldy. Pokud se při alokaci nevejdeme do místa na části haldy, je potřeba provést úklid. Ten spočívá v prohození aktivní a neaktivní části. Do nově aktivní části se překopírují živé objekty ze staré, již neaktivní, části. Mrtvé objekty nekopírujeme, ale při dalším prohození aktvníaktivní a neaktivní části je jednoduše přepíšeme.
 
Kopírovací algoritmus probíhá zdlouhavě, protože se objekty musí přesouvat z částí haldy. Kvůli náročnosti celého přesunu tedy mohou být prodlevy ještě znatelnější než při použití mark & sweep. Výhodou je, že nenastává fragmentace jako u mark & sweep. Objekty jsou totiž udržovány na spodku právě používaného prostoru, proto stačí k jejich adresovaní mnohem menší rozptyl adres.