org.mmtk.plan.markcompact
Class MC

java.lang.Object
  extended by org.mmtk.plan.Plan
      extended by org.mmtk.plan.Simple
          extended by org.mmtk.plan.StopTheWorld
              extended by org.mmtk.plan.markcompact.MC
All Implemented Interfaces:
Constants

public class MC
extends StopTheWorld

This class implements the global state of a simple sliding mark-compact collector.

FIXME Need algorithmic overview and references.

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). 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.


Field Summary
static short CALCULATE_FP
          Calculate forwarding pointers via a linear scan over the heap
static short COMPACT
          Perform compaction via a linear scan over the heap
static short FORWARD_CLOSURE
           
 Trace forwardTrace
          This trace updates pointers with the forwarded references
static int MARK_COMPACT
          The space descriptor
 Trace markTrace
          This trace sets the mark bit in live objects
 short mcCollection
          This is the phase that is executed to perform a mark-compact collection.
static MarkCompactSpace mcSpace
          The mark compact space itself
static short PREPARE_FORWARD
           
static short RELEASE_FORWARD
           
static int SCAN_FORWARD
          Specialized method identifier for the FORWARD phase
static int SCAN_MARK
          Specialized method identifier for the MARK phase
 
Fields inherited from class org.mmtk.plan.StopTheWorld
postSanityPhase, preSanityPhase
 
Fields inherited from class org.mmtk.plan.Simple
CLOSURE, collection, collectionAttempt, COMPLETE, completeClosurePhase, FINALIZABLE, finishPhase, FORWARD, FORWARD_FINALIZABLE, FORWARD_REFS, forwardPhase, INITIATE, initPhase, PHANTOM_REFS, POST_SANITY_PLACEHOLDER, PRE_SANITY_PLACEHOLDER, PREPARE, PREPARE_STACKS, prepareStacks, refTypeClosurePhase, RELEASE, rootClosurePhase, ROOTS, SANITY_BUILD_TABLE, SANITY_CHECK_TABLE, SANITY_COPY_ROOTS, SANITY_PREPARE, SANITY_RELEASE, SANITY_ROOTS, SANITY_SET_POSTGC, SANITY_SET_PREGC, sanityBuildPhase, sanityCheckPhase, SET_COLLECTION_KIND, SOFT_REFS, STACK_ROOTS, WEAK_REFS, WEAK_TRACK_REFS
 
Fields inherited from class org.mmtk.plan.Plan
ALLOC_CODE, ALLOC_COLD_CODE, ALLOC_DEFAULT, ALLOC_GCSPY, ALLOC_HOT_CODE, ALLOC_IMMORTAL, ALLOC_LARGE_CODE, ALLOC_LOS, ALLOC_NON_MOVING, ALLOC_NON_REFERENCE, ALLOC_PRIMITIVE_LOS, ALLOC_STACK, allocationSiteCount, ALLOCATORS, concurrentWorkers, controlCollectorContext, DEFAULT_MAX_NURSERY, DEFAULT_MIN_NURSERY, DEFAULT_SITE, defaultCollectorContext, emergencyCollection, GATHER_WRITE_BARRIER_STATS, GC_PREPARE, GC_PROPER, IMMORTAL, immortalSpace, insideHarness, internalTriggeredCollection, LARGE_CODE, largeCodeSpace, lastInternalTriggeredCollection, LOS, loSpace, MAX_NON_LOS_COPY_BYTES, MAX_NON_LOS_DEFAULT_ALLOC_BYTES, MAX_NON_LOS_NONMOVING_ALLOC_BYTES, META, metaDataSpace, NEEDS_LOG_BIT_IN_HEADER, NON_MOVING, NON_PARTICIPANT, nonMovingSpace, NOT_IN_GC, parallelWorkers, pretenureThreshold, SANITY, sanityChecker, sanitySpace, SCAN_BOOT_IMAGE, SMALL_CODE, smallCodeSpace, stacksPrepared, totalTime, USE_CODE_SPACE, userTriggeredCollection, VM_SPACE, vmSpace
 
Fields inherited from interface org.mmtk.utility.Constants
ALIGNMENT_VALUE, ARRAY_ELEMENT, BITS_IN_ADDRESS, BITS_IN_BYTE, BITS_IN_CHAR, BITS_IN_INT, BITS_IN_PAGE, BITS_IN_SHORT, BITS_IN_WORD, BYTES_IN_ADDRESS, BYTES_IN_BYTE, BYTES_IN_CHAR, BYTES_IN_INT, BYTES_IN_KBYTE, BYTES_IN_MBYTE, BYTES_IN_PAGE, BYTES_IN_SHORT, BYTES_IN_WORD, CARD_MASK, CARD_META_PAGES_PER_REGION, INSTANCE_FIELD, LOG_BITS_IN_ADDRESS, LOG_BITS_IN_BYTE, LOG_BITS_IN_CHAR, LOG_BITS_IN_INT, LOG_BITS_IN_PAGE, LOG_BITS_IN_SHORT, LOG_BITS_IN_WORD, LOG_BYTES_IN_ADDRESS, LOG_BYTES_IN_ADDRESS_SPACE, LOG_BYTES_IN_BYTE, LOG_BYTES_IN_CHAR, LOG_BYTES_IN_INT, LOG_BYTES_IN_KBYTE, LOG_BYTES_IN_MBYTE, LOG_BYTES_IN_PAGE, LOG_BYTES_IN_SHORT, LOG_BYTES_IN_WORD, LOG_CARD_BYTES, LOG_CARD_GRAIN, LOG_CARD_META_BYTES, LOG_CARD_META_PAGES, LOG_CARD_META_SIZE, LOG_CARD_UNITS, LOG_MIN_ALIGNMENT, MAX_ALIGNMENT, MAX_BYTES_PADDING, MAX_INT, MIN_ALIGNMENT, MIN_INT, SUPPORT_CARD_SCANNING
 
Constructor Summary
MC()
          Constructor.
 
Method Summary
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
 int getPagesUsed()
          Return the number of pages reserved for use given the pending allocation.
protected  void registerSpecializedMethods()
          Register specialized methods.
 int sanityExpectedRC(ObjectReference object, int sanityRootRC)
          Return the expected reference count.
 boolean willNeverMove(ObjectReference object)
          Can this object ever move.
 
Methods inherited from class org.mmtk.plan.StopTheWorld
processOptions
 
Methods inherited from class org.mmtk.plan.Simple
replacePhase, replacePlaceholderPhase, switchNurseryZeroingApproach
 
Methods inherited from class org.mmtk.plan.Plan
availableMemory, bootTimeWriteBarrier, collectionRequired, concurrentCollectionRequired, enableAllocation, enableCollection, forceFullHeapCollection, freeMemory, fullyBooted, gcInProgress, gcInProgressProper, getAllocationSite, getCollectionReserve, getPagesAvail, getPagesReserved, getSpecializedScanClass, getTotalPages, handleUserCollectionRequest, harnessBegin, harnessEnd, insertPhaseAfter, isCurrentGCNursery, isEmergencyCollection, isInitialized, isInternalTriggeredCollection, isUserTriggeredCollection, lastCollectionFullHeap, lastCollectionWasExhaustive, loadObjectReference, logPoll, notifyExit, poll, printDetailedTiming, printPostStats, printPreStats, printUsedPages, reservedMemory, resetCollectionTrigger, sanityLinearScan, setGCStatus, stacksPrepared, startGCspyServer, storeObjectReference, stressTestGCRequired, totalMemory, triggerInternalCollectionRequest, usedMemory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

mcSpace

public static final MarkCompactSpace mcSpace
The mark compact space itself


MARK_COMPACT

public static final int MARK_COMPACT
The space descriptor


SCAN_MARK

public static final int SCAN_MARK
Specialized method identifier for the MARK phase

See Also:
Constant Field Values

SCAN_FORWARD

public static final int SCAN_FORWARD
Specialized method identifier for the FORWARD phase

See Also:
Constant Field Values

PREPARE_FORWARD

public static final short PREPARE_FORWARD

FORWARD_CLOSURE

public static final short FORWARD_CLOSURE

RELEASE_FORWARD

public static final short RELEASE_FORWARD

CALCULATE_FP

public static final short CALCULATE_FP
Calculate forwarding pointers via a linear scan over the heap


COMPACT

public static final short COMPACT
Perform compaction via a linear scan over the heap


mcCollection

public short mcCollection
This is the phase that is executed to perform a mark-compact collection. FIXME: Far too much duplication and inside knowledge of StopTheWorld


markTrace

public final Trace markTrace
This trace sets the mark bit in live objects


forwardTrace

public final Trace forwardTrace
This trace updates pointers with the forwarded references

Constructor Detail

MC

public MC()
Constructor.

Method Detail

collectionPhase

public final void collectionPhase(short phaseId)
Perform a (global) collection phase.

Overrides:
collectionPhase in class Simple
Parameters:
phaseId - The unique id of the phase to perform.

getPagesUsed

public int getPagesUsed()
Return the number of pages reserved for use given the pending allocation. The superclass accounts for its spaces, we just augment this with the mark-sweep space's contribution.

Overrides:
getPagesUsed in class Plan
Returns:
The number of pages reserved given the pending allocation, excluding space reserved for copying.

willNeverMove

public boolean willNeverMove(ObjectReference object)
Description copied from class: Plan
Can this object ever move. Used by the VM to make decisions about whether it needs to copy IO buffers etc.

Overrides:
willNeverMove in class Plan
Parameters:
object - The object in question
Returns:
true if it is not possible that the object will ever move.

sanityExpectedRC

public int sanityExpectedRC(ObjectReference object,
                            int sanityRootRC)
Description copied from class: Plan
Return the expected reference count. For non-reference counting collectors this becomes a true/false relationship.

Overrides:
sanityExpectedRC in class Plan
Parameters:
object - The object to check.
sanityRootRC - The number of root references to the object.
Returns:
The expected (root excluded) reference count.

registerSpecializedMethods

protected void registerSpecializedMethods()
Description copied from class: Plan
Register specialized methods.

Overrides:
registerSpecializedMethods in class Plan