org.mmtk.plan.semispace
Class SS

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.semispace.SS
All Implemented Interfaces:
Constants
Direct Known Subclasses:
GCTrace, SSGCspy, UsePrimitiveWriteBarriers

public class SS
extends StopTheWorld

This class implements a simple semi-space collector. See the Jones & Lins GC book, section 2.2 for an overview of the basic algorithm. This implementation also includes a large object space (LOS), and an uncollected "immortal" space.

All plans make a clear distinction between global and thread-local activities. Global activities must be synchronized, whereas no synchronization is required for thread-local activities. Instances of Plan map 1:1 to "kernel threads" (aka CPUs). Thus instance methods allow fast, unsychronized access to Plan utilities such as allocation and collection. Each instance rests on static resources (such as memory and virtual memory resources) which are "global" and therefore "static" members of Plan. This mapping of threads to instances is crucial to understanding the correctness and performance properties of this plan.


Field Summary
static int ALLOC_SS
           
static CopySpace copySpace0
          One of the two semi spaces that alternate roles at each collection
static CopySpace copySpace1
          One of the two semi spaces that alternate roles at each collection
static boolean hi
          true if allocating into the "higher" semispace
static int SCAN_SS
           
static int SS0
           
static int SS1
           
 Trace ssTrace
           
 
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
SS()
          Constructor
 
Method Summary
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
static CopySpace fromSpace()
           
 int getCollectionReserve()
          Return the number of pages reserved for copying.
 int getPagesAvail()
          Return the number of pages available for allocation, assuming all future allocation is to the semi-space.
 int getPagesUsed()
          Return the number of pages reserved for use given the pending allocation.
protected  void registerSpecializedMethods()
          Register specialized methods.
static CopySpace toSpace()
           
 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, getPagesReserved, getSpecializedScanClass, getTotalPages, handleUserCollectionRequest, harnessBegin, harnessEnd, insertPhaseAfter, isCurrentGCNursery, isEmergencyCollection, isInitialized, isInternalTriggeredCollection, isUserTriggeredCollection, lastCollectionFullHeap, lastCollectionWasExhaustive, loadObjectReference, logPoll, notifyExit, poll, printDetailedTiming, printPostStats, printPreStats, printUsedPages, reservedMemory, resetCollectionTrigger, sanityExpectedRC, 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

hi

public static boolean hi
true if allocating into the "higher" semispace


copySpace0

public static final CopySpace copySpace0
One of the two semi spaces that alternate roles at each collection


SS0

public static final int SS0

copySpace1

public static final CopySpace copySpace1
One of the two semi spaces that alternate roles at each collection


SS1

public static final int SS1

ssTrace

public final Trace ssTrace

ALLOC_SS

public static final int ALLOC_SS
See Also:
Constant Field Values

SCAN_SS

public static final int SCAN_SS
See Also:
Constant Field Values
Constructor Detail

SS

public SS()
Constructor

Method Detail

toSpace

public static CopySpace toSpace()
Returns:
The to space for the current collection.

fromSpace

public static CopySpace fromSpace()
Returns:
The from space for the current collection.

collectionPhase

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

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

getCollectionReserve

public final int getCollectionReserve()
Return the number of pages reserved for copying.

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

getPagesUsed

public int getPagesUsed()
Return the number of pages reserved for use given the pending allocation. This is exclusive of space reserved for copying.

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

getPagesAvail

public final int getPagesAvail()
Return the number of pages available for allocation, assuming all future allocation is to the semi-space.

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

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.

registerSpecializedMethods

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

Overrides:
registerSpecializedMethods in class Plan