Ladislav Thon (neregistrovaný)
---.insite.cz
22. 1. 2009 16:48
Nový
celé vlákno
GC obecně potřebují znát pouze "root set": sadu objektů, o kterých je známo, že jsou vždy dosažitelné. To jsou objekty na zásobníku, globální objekty, a tak. V případě generačních GC se to trochu komplikuje, ale to nechme. Tranzitivní uzávěr root set (všechny objekty, na které se z root set lze dostat přes reference) jsou pak "živé" objekty, ostatní lze vyházet. Takže obecně platí, že GC nepotřebuje tabulku všech objektů (to nezávisí na použitém algoritmu).
Uvolňování paměti je zajímavá otázka, to se leckde vůbec neřeší. Třeba Suní JVM co jednou schvátí, to už nenavrátí. Kopírovací algoritmus se obvykle popisuje tak, že alokovaná paměť se rozdělí na dvě části a ty si aplikace spravuje sama, ale zřejmě se dá implementovat i tak, že nová oblast pro objekty se vždycky alokuje znova a ta stará se po zkopírování všech živých objektů dealokuje, jak mi vyplývá z tohoto článku.