Part 4: the implementation


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