org.mmtk.plan.generational.copying
Class GenCopy

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.copying.GenCopy
All Implemented Interfaces:
Constants

public class GenCopy
extends Gen

This class implements the functionality of a standard two-generation copying collector. 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 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.

All plans make a clear distinction between global and thread-local activities. Global activities must be synchronized, whereas no synchronization is required for thread-local activities. Instances of Plan map 1:1 to "kernel threads" (aka CPUs). Thus instance methods allow fast, unsychronized access to Plan utilities such as allocation and collection. Each instance rests on static resources (such as memory and virtual memory resources) which are "global" and therefore "static" members of Plan. This mapping of threads to instances is crucial to understanding the correctness and performance proprties of this plan.


Field Summary
(package private) static boolean hi
          Class variables
(package private) static CopySpace matureSpace0
          The low half of the copying mature space.
(package private) static CopySpace matureSpace1
          The high half of the copying mature space.
(package private)  Trace matureTrace
          Instance fields
(package private) static int MS0
           
(package private) static int MS1
           
 
Fields inherited from class org.mmtk.plan.generational.Gen
ALLOC_MATURE, ALLOC_MATURE_MAJORGC, ALLOC_MATURE_MINORGC, ALLOC_NURSERY, arrayRemsetPool, 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, 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
GenCopy()
          Constructor
 
Method Summary
 Space activeMatureSpace()
           
 void collectionPhase(short phaseId)
          Perform a phase of the currently active collection.
protected  boolean copyMature()
           
(package private) static CopySpace fromSpace()
           
(package private) static int fromSpaceDesc()
           
 int getCollectionReserve()
          Return the number of pages reserved for copying.
 int getMaturePhysicalPagesAvail()
          Return the number of pages available for allocation into the mature space.
 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.
protected  void registerSpecializedMethods()
          Register specialized methods.
(package private) static CopySpace toSpace()
           
(package private) static int toSpaceDesc()
           
 
Methods inherited from class org.mmtk.plan.generational.Gen
collectionRequired, forceFullHeapCollection, getPagesAvail, isCurrentGCNursery, lastCollectionFullHeap, printPreStats, requiresFullHeapCollection, sanityExpectedRC, traceFullHeap, willNeverMove
 
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, concurrentCollectionRequired, freeMemory, fullyBooted, gcInProgress, gcInProgressProper, getAllocationSite, getHeapFullThreshold, getMetaDataPagesUsed, getPagesReserved, getSpecializedScanClass, getTimeCap, getTotalPages, harnessBegin, harnessEnd, insertPhaseAfter, isCollectionTriggered, isEmergencyCollection, isInitialized, lastCollectionFailed, lastCollectionWasExhaustive, loadObjectReference, notifyExit, poll, printDetailedTiming, printPostStats, printUsedPages, reservedMemory, 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

hi

static boolean hi
Class variables


matureSpace0

static CopySpace matureSpace0
The low half of the copying mature space. We allocate into this space when hi is false.


MS0

static final int MS0

matureSpace1

static CopySpace matureSpace1
The high half of the copying mature space. We allocate into this space when hi is true.


MS1

static final int MS1

matureTrace

final Trace matureTrace
Instance fields

Constructor Detail

GenCopy

public GenCopy()
Constructor

Method Detail

copyMature

protected boolean copyMature()
Overrides:
copyMature in class Gen
Returns:
Does the mature space do copying ?

toSpace

static CopySpace toSpace()
Returns:
The semispace we are currently allocating into

toSpaceDesc

static int toSpaceDesc()
Returns:
Space descriptor for to-space.

fromSpace

static CopySpace fromSpace()
Returns:
The semispace we are currently copying from (or copied from at last major GC)

fromSpaceDesc

static int fromSpaceDesc()
Returns:
Space descriptor for from-space

collectionPhase

public void collectionPhase(short phaseId)
Perform a phase of the currently active collection.

Overrides:
collectionPhase in class Gen
Parameters:
phaseId - Collection phase to process

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.

getCollectionReserve

public final int getCollectionReserve()
Return the number of pages reserved for copying.

Overrides:
getCollectionReserve in class Gen
Returns:
the number of pages 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 Gen
Returns:
the number of pages a collection is required to free to satisfy outstanding allocation requests.

getMaturePhysicalPagesAvail

public int getMaturePhysicalPagesAvail()
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.

activeMatureSpace

public Space activeMatureSpace()
Specified by:
activeMatureSpace in class Gen
Returns:
The mature space we are currently allocating into

registerSpecializedMethods

protected void registerSpecializedMethods()
Register specialized methods.

Overrides:
registerSpecializedMethods in class Gen