Garbage Collector
Pointry uvnitr kernelu
- Pointr na objekt bude zabalen do specialniho objektu, ktery se bude registrovat v GC (GC tedy vi, ze objekt je drzen)
- Pointry na pole reseny stejne. (pointry na KSID jmena GC neresi)
- V kernelu bude pointr na objekt ulozen jako pointr na nektery z EntryPointu? objektu - stejne jako v IS
Objecty na halde
- Objekt, ma vice vstupnich bodu.
- Data jsou v IS pameti,
- plus ma pridruzeny cpp objekt CKerObject
- Pole
- ridici objekt je v soucasnosti normalni cpp trida
- vlastni data jsou ulozeny v IS pameti
- Nemohou existovat pointery (reference) na clenske promenne objektu nebo prvky poli. GC budu spoustet jenom, kdyz je prazdny stack
Strategie
- GC bude pousten jen, pokud je prazdny stack -> zjednoduseni
- GC nebude data setrasat. Smirim se s fragmentovanou IS pameti. To mi zas tolik nevadi, malloc a free pro IS haldu uz mam naimplementovany, slozitejsi malloc a free je OK, je to prubezna a zanedbatelna zatez. Spise by mi vadilo dlouhe zaseknoti v GC, proto chci, aby GC byl co nejjednodussi. Setrasani by byla slozita operace (posun dat plus posun vsech pointeru, ktere na ne odkazuji, plus bugy).
- Navic: pole pri zmene rozmeru muzou pamet uvolnovat rovnou a necekat na GC
- Pri uvolnovani se nevolaji destruktory (pro KrkalC je to v pohode, jazyk nic takoveho neobsahuje), pro pridruzene cpp tridy by to mohlo vadit - viz postup2
Graf
- Pouzita pamet se bude hledat prochazenim grafu (hrany jsou pointry, vrcholy data)
- Mista kde uz jsem byl si oznacim tagem (tyto objekty zustanou v pameti, neoznacene objekty mohu uvolnit)
- Zacnu od Statickych promennych a kernelem drzenych promennych. (vse)
- Pokracuji pres prvky poli a promenne objektu (vyuzivam typovou informaci)
- Graf se spise konstruje az pri vyvolani GC nez prubezne (??) (i prubezna konstrukce ma sve vyhody (plynulost))
Postup1 - preferovany
- Vsechny objekty a pole jsou nyni provazany ve spojaku. Krome dat v IS pameti jsou pouzivany klasicke cpp tridy.
- Prochazenim grafu oznacim pristupne objekty
- Projdu vsechny objekty a ty neoznacene beznym zpusobem odalokuju
- Vyhoda je jednoduchost a nutnost delat jen minimalni zmeny
Postup2
- Potrebuju presunout data z cpp trid do IS pameti
- Celou haldu oznacim za volnou
- Prochazim graf a u nalezenych objektu si znovu zarezervuju jejich pamet
- Musim zajistit, aby nebylo potreba volat destruktory na nepristupne objekty
- Vyhoda by byla v rychlosti, pokud je tech nepristupnych objektu vice, nez tech pristupnych
Download in other formats: