bmaxa
Legenda
- Poruka
- 70.808
Elem, problem automatske alokacije memorije je postao aktuelan
u funkcionalnim jezicima gde postoji suma referenci tako da je
manualna alokacija memorije gotovo nemoguca.
Sta je GC?
To je thread koji obavlja funkciju "ciscenja" tj dealokacije memorije.
Sta je neophodno da se ovo obavi?
Neophodno je da iskanira memoriju za referencama koje vise
nisu referencirane. Kako to obavlja? Skenira stek, heap
i static space na pointere. Ukoliko nema pointera na odredjeni
blok memorije, markira da se moze "ocistiti". Potom oslobadja
i eventualno zove finalizere.
Sta mora da uradi? Da bi bezbedno mogao da iskanira memoriju,
prvo mora da zaustavi korisnicke threadove. Najprostiji je "stop the world"
GC, koji zaustavlja sve threadove, potom skanira, potom ih restartuje.
ima vise varijanti, cak onih koji ne zaustavljaju threadove, nego
koriste memorijsku barijeru koja se postavlja pre svakog pristupa
pointeru, ali za to je potrebna podrska jezika.
I to bi bilo to ukratko.
u funkcionalnim jezicima gde postoji suma referenci tako da je
manualna alokacija memorije gotovo nemoguca.
Sta je GC?
To je thread koji obavlja funkciju "ciscenja" tj dealokacije memorije.
Sta je neophodno da se ovo obavi?
Neophodno je da iskanira memoriju za referencama koje vise
nisu referencirane. Kako to obavlja? Skenira stek, heap
i static space na pointere. Ukoliko nema pointera na odredjeni
blok memorije, markira da se moze "ocistiti". Potom oslobadja
i eventualno zove finalizere.
Sta mora da uradi? Da bi bezbedno mogao da iskanira memoriju,
prvo mora da zaustavi korisnicke threadove. Najprostiji je "stop the world"
GC, koji zaustavlja sve threadove, potom skanira, potom ih restartuje.
ima vise varijanti, cak onih koji ne zaustavljaju threadove, nego
koriste memorijsku barijeru koja se postavlja pre svakog pristupa
pointeru, ali za to je potrebna podrska jezika.
I to bi bilo to ukratko.