org.mmtk.plan.immix
Class Immix

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.immix.Immix
All Implemented Interfaces:
Constants
Direct Known Subclasses:
StickyImmix

public class Immix
extends StopTheWorld

This class implements the global state of an immix collector. See the PLDI'08 paper by Blackburn and McKinley for a description of the algorithm: http://doi.acm.org/10.1145/1375581.1375586 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
static int IMMIX
           
static ImmixSpace immixSpace
          Class variables
 Trace immixTrace
          Instance variables
protected  boolean lastGCWasDefrag
           
 boolean nextGCWholeHeap
          will the next collection collect the whole heap?
static int SCAN_DEFRAG
           
static int SCAN_IMMIX
           
 
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
Immix()
          Constructor.
 
Method Summary
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
 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.
 boolean lastCollectionWasExhaustive()
           
protected  void registerSpecializedMethods()
          Register specialized methods.
 boolean willNeverMove(ObjectReference object)
          Can this object ever move.
 
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, collectionRequired, concurrentCollectionRequired, forceFullHeapCollection, freeMemory, fullyBooted, gcInProgress, gcInProgressProper, getAllocationSite, getCollectionReserve, getHeapFullThreshold, getMetaDataPagesUsed, getPagesAvail, getPagesReserved, getSpecializedScanClass, getTimeCap, getTotalPages, harnessBegin, harnessEnd, insertPhaseAfter, isCollectionTriggered, isCurrentGCNursery, isEmergencyCollection, isInitialized, lastCollectionFailed, lastCollectionFullHeap, loadObjectReference, notifyExit, poll, printDetailedTiming, printPostStats, printPreStats, printUsedPages, reservedMemory, sanityExpectedRC, sanityLinearScan, setAwaitingAsyncCollection, setCollectionTrigger, setCollectionTriggered, setGCStatus, stacksPrepared, startGCspyServer, storeObjectReference, stressTestGCRequired, totalMemory, usedMemory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

immixSpace

public static final ImmixSpace immixSpace
Class variables


IMMIX

public static final int IMMIX

SCAN_IMMIX

public static final int SCAN_IMMIX
See Also:
Constant Field Values

SCAN_DEFRAG

public static final int SCAN_DEFRAG
See Also:
Constant Field Values

immixTrace

public final Trace immixTrace
Instance variables


nextGCWholeHeap

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


collectWholeHeap

public boolean collectWholeHeap
will this collection collect the whole heap


lastGCWasDefrag

protected boolean lastGCWasDefrag
Constructor Detail

Immix

public Immix()
Constructor.

Method Detail

collectionPhase

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

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

lastCollectionWasExhaustive

public boolean lastCollectionWasExhaustive()
Overrides:
lastCollectionWasExhaustive in class Plan
Returns:
Whether last GC was an exhaustive attempt to collect the heap. For many collectors this is the same as asking whether the last GC was a full heap collection.

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.

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.

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 - Object in question
Returns:
True if the object will never move
See Also:
Plan.willNeverMove(org.vmmagic.unboxed.ObjectReference)

registerSpecializedMethods

protected void registerSpecializedMethods()
Register specialized methods.

Overrides:
registerSpecializedMethods in class Plan