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