org.mmtk.plan.refcount
Class RCBase

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.refcount.RCBase
All Implemented Interfaces:
Constants
Direct Known Subclasses:
GenRC, RC

public class RCBase
extends StopTheWorld

This class implements the global state of a reference counting collector. See Shahriyar et al for details of and rationale for the optimizations used here (http://dx.doi.org/10.1145/2258996.2259008). See Chapter 4 of Daniel Frampton's PhD thesis for details of and rationale for the cycle collection strategy used by this collector.


Field Summary
 Trace backupTrace
           
static short BT_CLOSURE
           
static boolean BUILD_FOR_GENRC
          True if we are building for generational RC
static boolean CC_BACKUP_TRACE
          Use backup tracing for cycle collection (currently the only option)
static boolean CC_ENABLED
          Is cycle collection enabled?
static boolean ccForceFull
          Force full cycle collection at each GC?
 SharedDeque decPool
           
 short genRCCollection
           
protected static short genRCCollectionPhase
           
protected static short genRCRootClosurePhase
           
private  BTFreeLargeObjectSweeper loFreeSweeper
           
 SharedDeque modPool
           
 SharedDeque newRootPool
           
 SharedDeque oldRootPool
           
static boolean performCycleCollection
           
static short PROCESS_DECBUFFER
           
static short PROCESS_MODBUFFER
           
static short PROCESS_NEWROOTBUFFER
           
static short PROCESS_OLDROOTBUFFER
           
static ExplicitLargeObjectSpace rcloSpace
           
static ExplicitFreeListSpace rcSpace
           
private  BTSweeper rcSweeper
           
static int REF_COUNT
           
static int REF_COUNT_LOS
           
 short refCountCollection
          This is the phase that is executed to perform a collection.
protected static short refCountCollectionPhase
          Reference counting specific collection steps.
protected static short refCountRootClosurePhase
          Perform the initial determination of liveness from the roots.
 Trace rootTrace
           
 
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
RCBase()
          Constructor
 
Method Summary
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
 int getPagesUsed()
          Return the number of pages reserved for use given the pending allocation.
static boolean isRCObject(ObjectReference object)
           
 boolean lastCollectionFullHeap()
           
 void processOptions()
          The processOptions method is called by the runtime immediately after command-line arguments are available.
protected  void registerSpecializedMethods()
          Register specialized methods.
 int sanityExpectedRC(ObjectReference object, int sanityRootRC)
          Return the expected reference count.
 void sanityLinearScan(LinearScan scan)
          Perform a linear scan across all objects in the heap to check for leaks.
 
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, getCollectionReserve, getPagesAvail, getPagesReserved, getSpecializedScanClass, getTotalPages, handleUserCollectionRequest, harnessBegin, harnessEnd, insertPhaseAfter, isCurrentGCNursery, isEmergencyCollection, isInitialized, isInternalTriggeredCollection, isUserTriggeredCollection, lastCollectionWasExhaustive, loadObjectReference, logPoll, notifyExit, poll, printDetailedTiming, printPostStats, printPreStats, printUsedPages, reservedMemory, resetCollectionTrigger, setGCStatus, stacksPrepared, startGCspyServer, storeObjectReference, stressTestGCRequired, totalMemory, triggerInternalCollectionRequest, usedMemory, willNeverMove
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROCESS_OLDROOTBUFFER

public static final short PROCESS_OLDROOTBUFFER

PROCESS_NEWROOTBUFFER

public static final short PROCESS_NEWROOTBUFFER

PROCESS_MODBUFFER

public static final short PROCESS_MODBUFFER

PROCESS_DECBUFFER

public static final short PROCESS_DECBUFFER

CC_ENABLED

public static final boolean CC_ENABLED
Is cycle collection enabled?

See Also:
Constant Field Values

ccForceFull

public static boolean ccForceFull
Force full cycle collection at each GC?


CC_BACKUP_TRACE

public static final boolean CC_BACKUP_TRACE
Use backup tracing for cycle collection (currently the only option)

See Also:
Constant Field Values

performCycleCollection

public static boolean performCycleCollection

BT_CLOSURE

public static final short BT_CLOSURE

BUILD_FOR_GENRC

public static final boolean BUILD_FOR_GENRC
True if we are building for generational RC


refCountCollectionPhase

protected static final short refCountCollectionPhase
Reference counting specific collection steps.


genRCCollectionPhase

protected static final short genRCCollectionPhase

refCountRootClosurePhase

protected static final short refCountRootClosurePhase
Perform the initial determination of liveness from the roots.


genRCRootClosurePhase

protected static final short genRCRootClosurePhase

refCountCollection

public short refCountCollection
This is the phase that is executed to perform a collection.


genRCCollection

public short genRCCollection

rcSpace

public static final ExplicitFreeListSpace rcSpace

rcloSpace

public static final ExplicitLargeObjectSpace rcloSpace

REF_COUNT

public static final int REF_COUNT

REF_COUNT_LOS

public static final int REF_COUNT_LOS

modPool

public final SharedDeque modPool

decPool

public final SharedDeque decPool

newRootPool

public final SharedDeque newRootPool

oldRootPool

public final SharedDeque oldRootPool

rootTrace

public final Trace rootTrace

backupTrace

public final Trace backupTrace

rcSweeper

private final BTSweeper rcSweeper

loFreeSweeper

private final BTFreeLargeObjectSweeper loFreeSweeper
Constructor Detail

RCBase

public RCBase()
Constructor

Method Detail

processOptions

public void processOptions()
Description copied from class: StopTheWorld
The processOptions method is called by the runtime immediately after command-line arguments are available. Allocation must be supported prior to this point because the runtime infrastructure may require allocation in order to parse the command line arguments. For this reason all plans should operate gracefully on the default minimum heap size until the point that processOptions is called.

Overrides:
processOptions in class StopTheWorld

isRCObject

public static final boolean isRCObject(ObjectReference object)

lastCollectionFullHeap

public boolean lastCollectionFullHeap()
Overrides:
lastCollectionFullHeap in class Plan
Returns:
Whether last GC is a full GC.

collectionPhase

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

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

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.

sanityLinearScan

public void sanityLinearScan(LinearScan scan)
Perform a linear scan across all objects in the heap to check for leaks.

Overrides:
sanityLinearScan in class Plan
Parameters:
scan - The scanner callback to use.

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 Plan