A multiprocessor, multi-program, stop-the-world garbage collection program
is described. The system initially over partitions the root sources, and
then iteratively employs static and dynamic work balancing. Garbage
collection threads compete dynamically for the initial partitions. Work
stealing double-ended queues, where contention is reduced, are described
to provide dynamic load balancing among the threads. Contention is
resolved by using atomic instructions. The heap is broken into a young
and an old generation where parallel semi-space copying is used to
collect the young generation and parallel mark-compacting the old
generation. Speed and efficiency of collection is enhanced by use of card
tables and linking objects, and overflow conditions are efficiently
handled by linking using class pointers. A garbage collection termination
employs a global status word.