org.mmtk.plan.generational.immix
Class GenImmix

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.generational.Gen
                  extended by org.mmtk.plan.generational.immix.GenImmix
All Implemented Interfaces:
Constants
Direct Known Subclasses:
Selected.Plan

public class GenImmix
extends Gen

This class implements the functionality of a two-generation copying collector where the higher generation is an immix space. Nursery collections occur when either the heap is full or the nursery is full. The nursery size is determined by an optional command line argument. If undefined, the nursery size is "infinite", so nursery collections only occur when the heap is full (this is known as a flexible-sized nursery collector). Thus both fixed and flexible nursery sizes are supported. Full heap collections occur when the nursery size has dropped to a statically defined threshold, NURSERY_THRESHOLD

See the PLDI'08 paper by Blackburn and McKinley for a description of the algorithm: http://doi.acm.org/10.1145/1375581.1375586

See the Jones & Lins GC book, chapter 7 for a detailed discussion of generational collection and section 7.3 for an overview of the flexible nursery behavior ("The Standard ML of New Jersey collector"), or go to Appel's paper "Simple generational garbage collection and fast allocation." SP&E 19(2):171--183, 1989.

For general comments about the global/local distinction among classes refer to Plan.java and PlanLocal.java.


Field Summary
static int IMMIX
           
static ImmixSpace immixSpace
          The mature space, which for GenImmix uses a mark sweep collection policy.
private  boolean lastGCWasDefrag
           
 Trace matureTrace
          The trace class for a full-heap collection
static int SCAN_IMMIX
          Specialized scanning method identifier
 
Fields inherited from class org.mmtk.plan.generational.Gen
ALLOC_MATURE, ALLOC_MATURE_MAJORGC, ALLOC_MATURE_MINORGC, ALLOC_NURSERY, arrayRemsetPool, DEFAULT_PRETENURE_THRESHOLD_FRACTION, fullHeap, gcFullHeap, IGNORE_REMSETS, MATURE_FRACTION, modbufPool, nextGCFullHeap, NURSERY, NURSERY_VM_FRACTION, nurseryCons, nurseryMark, nurserySpace, nurseryTrace, remsetPool, SCAN_MATURE, SCAN_NURSERY, SURVIVAL_ESTIMATE, USE_NON_HEAP_OBJECT_REFERENCE_WRITE_BARRIER, USE_OBJECT_BARRIER, USE_OBJECT_BARRIER_FOR_AASTORE, USE_OBJECT_BARRIER_FOR_PUTFIELD, wbFast, wbSlow
 
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
GenImmix()
           
 
Method Summary
protected  Space activeMatureSpace()
          Accessor method to allow the generic generational code in Gen.java to access the mature space.
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
 int getCollectionReserve()
          Return the number of pages reserved for collection.
 int getMaturePhysicalPagesAvail()
          Return the number of pages available for allocation into the mature space.
 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.generational.Gen
collectionRequired, copyMature, forceFullHeapCollection, fullyBooted, getPagesAvail, isCurrentGCNursery, lastCollectionFullHeap, printPreStats, requiresFullHeapCollection, sanityExpectedRC, traceFullHeap
 
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, concurrentCollectionRequired, enableAllocation, enableCollection, freeMemory, gcInProgress, gcInProgressProper, getAllocationSite, getPagesReserved, getSpecializedScanClass, getTotalPages, handleUserCollectionRequest, harnessBegin, harnessEnd, insertPhaseAfter, isEmergencyCollection, isInitialized, isInternalTriggeredCollection, isUserTriggeredCollection, 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

immixSpace

public static final ImmixSpace immixSpace
The mature space, which for GenImmix uses a mark sweep collection policy.


IMMIX

public static final int IMMIX

SCAN_IMMIX

public static final int SCAN_IMMIX
Specialized scanning method identifier

See Also:
Constant Field Values

matureTrace

public final Trace matureTrace
The trace class for a full-heap collection


lastGCWasDefrag

private boolean lastGCWasDefrag
Constructor Detail

GenImmix

public GenImmix()
Method Detail

collectionPhase

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

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

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.

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

getMaturePhysicalPagesAvail

public int getMaturePhysicalPagesAvail()
Description copied from class: Gen
Return the number of pages available for allocation into the mature space.

Specified by:
getMaturePhysicalPagesAvail in class Gen
Returns:
The number of pages available for allocation into the mature space.

getCollectionReserve

public int getCollectionReserve()
Description copied from class: Gen
Return the number of pages reserved for collection.

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

activeMatureSpace

protected final Space activeMatureSpace()
Description copied from class: Gen
Accessor method to allow the generic generational code in Gen.java to access the mature space.

Specified by:
activeMatureSpace in class Gen
Returns:
The active mature 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 Gen
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 Gen