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 properties of this plan.


Field Summary
(package private) static boolean hi
          true if copying to "higher" semispace
(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
           
(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, 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
GenCopy()
          Constructor
 
Method Summary
 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.
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 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, fullyBooted, getPagesAvail, isCurrentGCNursery, lastCollectionFullHeap, printPreStats, requiresFullHeapCollection, sanityExpectedRC, traceFullHeap, willNeverMove
 
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, lastCollectionWasExhaustive, 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

hi

static boolean hi
true if copying to "higher" semispace


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
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 (global) collection phase.

Overrides:
collectionPhase in class Gen
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 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.

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.

activeMatureSpace

public 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 mature space we are currently allocating into

registerSpecializedMethods

protected void registerSpecializedMethods()
Description copied from class: Plan
Register specialized methods.

Overrides:
registerSpecializedMethods in class Gen