org.mmtk.plan.copyms
Class CopyMS

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.copyms.CopyMS
All Implemented Interfaces:
Constants

public class CopyMS
extends StopTheWorld

This class implements the global state of a full-heap collector with a copying nursery and mark-sweep mature space. Unlike a full generational collector, there is no write barrier, no remembered set, and every collection is full-heap. 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 int ALLOC_MS
           
static int ALLOC_NURSERY
           
static int MARK_SWEEP
           
static MarkSweepSpace msSpace
           
static int NURSERY
           
static CopySpace nurserySpace
          Class variables
static int SCAN_COPYMS
           
 Trace trace
          Instance variables
 
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, PRECOPY, 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, awaitingAsyncCollection, collectionTrigger, DEFAULT_MAX_NURSERY, DEFAULT_MIN_NURSERY, DEFAULT_POLL_FREQUENCY, DEFAULT_SITE, emergencyCollection, GATHER_WRITE_BARRIER_STATS, GC_PREPARE, GC_PROPER, HEAP_FULL_MINIMUM, HEAP_FULL_PERCENTAGE, IMMORTAL, immortalSpace, insideHarness, LARGE_CODE, largeCodeSpace, LOS, loSpace, MAX_COLLECTION_ATTEMPTS, MAX_NON_LOS_COPY_BYTES, MAX_NON_LOS_DEFAULT_ALLOC_BYTES, MAX_NON_LOS_NONMOVING_ALLOC_BYTES, META, META_DATA_POLL_FREQUENCY, metaDataSpace, NEEDS_LOG_BIT_IN_HEADER, NON_MOVING, NON_PARTICIPANT, nonMovingSpace, NOT_IN_GC, PLOS_FRAC, requiredAtStart, SANITY, sanityChecker, sanitySpace, SCAN_BOOT_IMAGE, SMALL_CODE, smallCodeSpace, stacksPrepared, timeCap, totalTime, USE_CODE_SPACE, 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
CopyMS()
          Constructor.
 
Method Summary
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
 boolean collectionRequired(boolean spaceFull)
          This method controls the triggering of a GC.
 int getCollectionReserve()
          Return the number of pages reserved for collection.
 int getPagesAvail()
          Return the number of pages available for allocation.
 int getPagesRequired()
          Calculate the number of pages a collection is required to free to satisfy outstanding allocation requests.
 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.
 
Methods inherited from class org.mmtk.plan.StopTheWorld
postBoot
 
Methods inherited from class org.mmtk.plan.Simple
replacePhase, replacePlaceholderPhase
 
Methods inherited from class org.mmtk.plan.Plan
availableMemory, boot, bootTimeWriteBarrier, checkForAsyncCollection, collectionComplete, concurrentCollectionRequired, forceFullHeapCollection, freeMemory, fullyBooted, gcInProgress, gcInProgressProper, getAllocationSite, getHeapFullThreshold, getMetaDataPagesUsed, getPagesReserved, getSpecializedScanClass, getTimeCap, getTotalPages, harnessBegin, harnessEnd, insertPhaseAfter, isCollectionTriggered, isCurrentGCNursery, isEmergencyCollection, isInitialized, lastCollectionFailed, lastCollectionFullHeap, lastCollectionWasExhaustive, loadObjectReference, notifyExit, poll, printDetailedTiming, printPostStats, printPreStats, printUsedPages, reservedMemory, sanityLinearScan, setAwaitingAsyncCollection, setCollectionTrigger, setCollectionTriggered, setGCStatus, stacksPrepared, startGCspyServer, storeObjectReference, stressTestGCRequired, totalMemory, usedMemory, willNeverMove
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

nurserySpace

public static final CopySpace nurserySpace
Class variables


msSpace

public static final MarkSweepSpace msSpace

NURSERY

public static final int NURSERY

MARK_SWEEP

public static final int MARK_SWEEP

ALLOC_NURSERY

public static final int ALLOC_NURSERY
See Also:
Constant Field Values

ALLOC_MS

public static final int ALLOC_MS
See Also:
Constant Field Values

SCAN_COPYMS

public static final int SCAN_COPYMS
See Also:
Constant Field Values

trace

public final Trace trace
Instance variables

Constructor Detail

CopyMS

public CopyMS()
Constructor.

Method Detail

collectionPhase

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

Overrides:
collectionPhase in class Simple
Parameters:
phaseId - Collection phase to execute.

collectionRequired

public final boolean collectionRequired(boolean spaceFull)
This method controls the triggering of a GC. It is called periodically during allocation. Returns true to trigger a collection.

Overrides:
collectionRequired in class Plan
Parameters:
spaceFull - Space request failed, must recover pages within 'space'.
Returns:
True if a collection is requested by the plan.

getPagesUsed

public int getPagesUsed()
Return the number of pages reserved for use given the pending allocation.

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

getCollectionReserve

public int getCollectionReserve()
Return the number of pages reserved for collection. For mark sweep this is a fixed fraction of total pages.

Overrides:
getCollectionReserve in class Plan
Returns:
The number of pages reserved given the pending allocation, including space reserved for collection.

getPagesAvail

public final int getPagesAvail()
Description copied from class: Plan
Return the number of pages available for allocation.

Overrides:
getPagesAvail in class Plan
Returns:
The number of pages available for allocation, assuming all future allocation is to the nursery.

getPagesRequired

public int getPagesRequired()
Calculate the number of pages a collection is required to free to satisfy outstanding allocation requests.

Overrides:
getPagesRequired in class Plan
Returns:
the number of pages a collection is required to free to satisfy outstanding allocation requests.

sanityExpectedRC

public int sanityExpectedRC(ObjectReference object,
                            int sanityRootRC)
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()
Register specialized methods.

Overrides:
registerSpecializedMethods in class Plan