org.mmtk.plan.stickyms
Class StickyMS

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.marksweep.MS
                  extended by org.mmtk.plan.stickyms.StickyMS
All Implemented Interfaces:
Constants

public class StickyMS
extends MS

This class implements the global state of a simple sticky mark bits collector, based a simple on mark-sweep 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.

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.


Field Summary
 boolean collectWholeHeap
          will this collection collect the whole heap
(package private) static boolean MAJOR_GC_ONLY
          If true then we only do full heap GCs---so we're like MarkSweep (+ write barrier)
 SharedDeque modPool
          Remset pool
 boolean nextGCWholeHeap
          will the next collection collect the whole heap?
(package private) static boolean NURSERY_COLLECT_PLOS
          If true, then new PLOS objects are collected at each nursery GC
static int SCAN_NURSERY
           
 
Fields inherited from class org.mmtk.plan.marksweep.MS
MARK_SWEEP, msSpace, msTrace, SCAN_MARK
 
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
StickyMS()
           
 
Method Summary
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
 void forceFullHeapCollection()
          Force the next collection to be full heap.
 boolean isCurrentGCNursery()
           
 boolean isLastGCFull()
           
 void printPreStats()
          Print pre-collection statistics.
protected  void registerSpecializedMethods()
          Register specialized methods.
 int sanityExpectedRC(ObjectReference object, int sanityRootRC)
          Return the expected reference count.
 void userTriggeredGC()
          A user-triggered GC has been initiated.
 
Methods inherited from class org.mmtk.plan.marksweep.MS
getPagesUsed, willNeverMove
 
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, freeMemory, fullyBooted, gcInProgress, gcInProgressProper, getAllocationSite, getCollectionReserve, getPagesAvail, getPagesReserved, getSpecializedScanClass, getTotalPages, handleUserCollectionRequest, harnessBegin, harnessEnd, insertPhaseAfter, isEmergencyCollection, isInitialized, isInternalTriggeredCollection, isUserTriggeredCollection, lastCollectionFullHeap, lastCollectionWasExhaustive, loadObjectReference, logPoll, notifyExit, poll, printDetailedTiming, printPostStats, 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

NURSERY_COLLECT_PLOS

static final boolean NURSERY_COLLECT_PLOS
If true, then new PLOS objects are collected at each nursery GC

See Also:
Constant Field Values

MAJOR_GC_ONLY

static final boolean MAJOR_GC_ONLY
If true then we only do full heap GCs---so we're like MarkSweep (+ write barrier)

See Also:
Constant Field Values

SCAN_NURSERY

public static int SCAN_NURSERY

nextGCWholeHeap

public boolean nextGCWholeHeap
will the next collection collect the whole heap?


collectWholeHeap

public boolean collectWholeHeap
will this collection collect the whole heap


modPool

public final SharedDeque modPool
Remset pool

Constructor Detail

StickyMS

public StickyMS()
Method Detail

userTriggeredGC

public void userTriggeredGC()
A user-triggered GC has been initiated.


forceFullHeapCollection

public void forceFullHeapCollection()
Description copied from class: Plan
Force the next collection to be full heap.

Overrides:
forceFullHeapCollection in class Plan

collectionPhase

public final void collectionPhase(short phaseId)
Description copied from class: MS
Perform a (global) collection phase.

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

printPreStats

public void printPreStats()
Print pre-collection statistics. In this class we prefix the output indicating whether the collection was full heap or not.

Overrides:
printPreStats in class Plan

isCurrentGCNursery

public final boolean isCurrentGCNursery()
Overrides:
isCurrentGCNursery in class Plan
Returns:
Is current GC only collecting objects allocated since last GC.

isLastGCFull

public final boolean isLastGCFull()
Returns:
Is last GC a full collection?

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 MS