Mark and Sweep Garbage Collector
Idea:
- use free list, as in malloc+free, but do free automatically
- mark all reachable objects
- insert all unreachable objects into free list
How to determine reachable objects?
- start from the set of roots (e.g. live local and global variables)
- follow all reference variables in allocated objects
- compiler generates information that indicates which fields and variables are of reference type
- mark reachable objects using depth-first search
What are roots?
- global reference variables
- reference variables on stack
- registers
Example
- inserting into a functional tree twice
- not using middle tree
- performing mark and sweep