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 a simple reference counting collector.


Field Summary
 Trace backupTrace
           
static short BT_CLOSURE
           
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 CC_FORCE_FULL
          Force full cycle collection at each GC?
 short collection
          This is the phase that is executed to perform a collection.
 SharedDeque decPool
           
private  BTFreeLargeObjectSweeper loFreeSweeper
           
private  BTScanLargeObjectSweeper loScanSweeper
           
 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
          Class fields
private  BTSweeper rcSweeper
           
static int REF_COUNT
           
static int REF_COUNT_LOS
           
protected static short refCountCollectionPhase
          Reference counting specific collection steps.
protected static short rootClosurePhase
          Perform the initial determination of liveness from the roots.
 Trace rootTrace
          Instance fields
 
Fields inherited from class org.mmtk.plan.StopTheWorld
postSanityPhase, preSanityPhase
 
Fields inherited from class org.mmtk.plan.Simple
CLOSURE, 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, 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
RCBase()
          Constructor
 
Method Summary
 void collectionPhase(short phaseId)
          Perform a (global) collection phase.
 int getPagesUsed()
          Return the number of pages used given the pending allocation.
static boolean isRCObject(ObjectReference object)
          Collection
 boolean lastCollectionFullHeap()
           
 void postBoot()
          The boot method is called early in the boot process before any allocation.
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
 
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, getPagesRequired, getPagesReserved, getSpecializedScanClass, getTimeCap, getTotalPages, harnessBegin, harnessEnd, insertPhaseAfter, isCollectionTriggered, isCurrentGCNursery, isEmergencyCollection, isInitialized, lastCollectionFailed, lastCollectionWasExhaustive, loadObjectReference, notifyExit, poll, printDetailedTiming, printPostStats, printPreStats, printUsedPages, reservedMemory, setAwaitingAsyncCollection, setCollectionTrigger, setCollectionTriggered, setGCStatus, stacksPrepared, startGCspyServer, storeObjectReference, stressTestGCRequired, totalMemory, 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

CC_FORCE_FULL

public static final boolean CC_FORCE_FULL
Force full cycle collection at each GC?

See Also:
Constant Field Values

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

refCountCollectionPhase

protected static final short refCountCollectionPhase
Reference counting specific collection steps.


rootClosurePhase

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


collection

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


rcSpace

public static final ExplicitFreeListSpace rcSpace
Class fields


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
Instance fields


backupTrace

public final Trace backupTrace

rcSweeper

private final BTSweeper rcSweeper

loScanSweeper

private final BTScanLargeObjectSweeper loScanSweeper

loFreeSweeper

private final BTFreeLargeObjectSweeper loFreeSweeper
Constructor Detail

RCBase

public RCBase()
Constructor

Method Detail

postBoot

public void postBoot()
The boot method is called early in the boot process before any allocation.

Overrides:
postBoot in class StopTheWorld

isRCObject

public static final boolean isRCObject(ObjectReference object)
Collection


lastCollectionFullHeap

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

collectionPhase

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

Overrides:
collectionPhase in class Simple
Parameters:
phaseId - Collection phase

getPagesUsed

public int getPagesUsed()
Return the number of pages used 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)
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()
Register specialized methods.

Overrides:
registerSpecializedMethods in class Plan