The object memory
incremental, compacting, generation-scavenging, mark-sweep collector:
- minor collection:
- mark from rootTable and VM roots
- compact youngSpace to delete unreachable objects
- remap pointers to young objects
- major collection (based on minor GC survivor count):
- reset youngSpace to start of memory
- clear rootTable
- perform "minor" collection
- set youngSpace to start of free memory
mark phase:
- state-machine traverses reachable object graph
- iterativ (not recursive): no C stack overhead
- pointer swizzling: no mark stack overhead
sweep phase:
- create forward block for each reachable object in young space
- contains object's address after compaction
- remap pointers in young objects; for each pointer
- indirect through pointer to find forward block
- replace pointer with address in forward block
- compact young objects towards youngStart