This class implements the global state of a simple sticky mark bits collector,
based on an immix collector. The sticky mark bits algorithm is
due to Demmers et al. (http://doi.acm.org/10.1145/96709.96735), and allows
generational collection to be performed in a non-moving heap by overloading
the role of mark bits to also indicate whether an object is new (nursery) or
not. Thus nursery objects are identified by a bit in their header, not by
where they lie within the address space. While Demmers et al. did their work
in a conservative collector, here we have an exact collector, so we can use
a regular write barrier, and don't need to use page protection etc.
See the PLDI'08 paper by Blackburn and McKinley for a description
of the algorithm: http://doi.acm.org/10.1145/1375581.1375586
All plans make a clear distinction between global and
thread-local activities, and divides global and local state
into separate class hierarchies. Global activities must be
synchronized, whereas no synchronization is required for
thread-local activities. There is a single instance of Plan (or the
appropriate sub-class), and a 1:1 mapping of PlanLocal to "kernel
threads" (aka CPUs or in Jikes RVM, Processors). Thus instance
methods of PlanLocal allow fast, unsychronized access to functions such as
allocation and collection.
The global instance defines and manages static resources
(such as memory and virtual memory resources). This mapping of threads to
instances is crucial to understanding the correctness and
performance properties of MMTk plans.