Garbage collection: Porovnání verzí
Smazaný obsah Přidaný obsah
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
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í
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.
|