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, unsynchronized 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.