org.mmtk.plan.semispace.gcspy
Class SSGCspyMutator

java.lang.Object
  extended by org.mmtk.plan.MutatorContext
      extended by org.mmtk.plan.SimpleMutator
          extended by org.mmtk.plan.StopTheWorldMutator
              extended by org.mmtk.plan.semispace.SSMutator
                  extended by org.mmtk.plan.semispace.gcspy.SSGCspyMutator
All Implemented Interfaces:
Constants

public class SSGCspyMutator
extends SSMutator

This class implements per-mutator thread behavior and state for the SSGCspy plan. See SSGCspy for an overview of the GC-spy mechanisms.

See Also:
SSMutator, SSGCspy, SSGCspyCollector, StopTheWorldMutator, MutatorContext

Field Summary
private static boolean DEBUG
           
private  BumpPointer gcspy
          Per-mutator allocator into GCspy's space
private static boolean LOS_FROMSPACE
           
private static boolean LOS_TOSPACE
           
 
Fields inherited from class org.mmtk.plan.semispace.SSMutator
ss
 
Fields inherited from class org.mmtk.plan.MutatorContext
immortal, lgcode, log, los, nonmove, smcode
 
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
SSGCspyMutator()
           
 
Method Summary
 Address alloc(int bytes, int align, int offset, int allocator, int site)
          Allocate memory for an object.
 void collectionPhase(short phaseId, boolean primary)
          Perform a per-mutator collection phase.
private  void debugSpaces(CopySpace scannedSpace)
          Debugging info for the semispaces
private  void gatherImmortal(int event)
          Gather data for the immortal space
private  void gcspyGatherData(int event)
          Gather data for GCspy for the semispaces, the immortal space and the large object space.
 Allocator getAllocatorFromSpace(Space space)
          Return the allocator instance associated with a space space, for this plan instance.
 void postAlloc(ObjectReference object, ObjectReference typeRef, int bytes, int allocator)
          Perform post-allocation actions.
private  LinearSpaceDriver toSpaceDriver()
           
 
Methods inherited from class org.mmtk.plan.semispace.SSMutator
initMutator, show
 
Methods inherited from class org.mmtk.plan.MutatorContext
addressBulkCopy, addressRead, addressTryCompareAndSwap, addressWrite, assertRemsetsFlushed, booleanBulkCopy, booleanRead, booleanWrite, byteBulkCopy, byteRead, byteWrite, charBulkCopy, charRead, charWrite, checkAllocator, deinitMutator, doubleBulkCopy, doubleRead, doubleWrite, extentBulkCopy, extentRead, extentWrite, floatBulkCopy, floatRead, floatWrite, flush, flushRememberedSets, getId, getLog, intBulkCopy, intRead, intTryCompareAndSwap, intWrite, javaLangReferenceReadBarrier, longBulkCopy, longRead, longTryCompareAndSwap, longWrite, objectReferenceBulkCopy, objectReferenceNonHeapRead, objectReferenceNonHeapWrite, objectReferenceRead, objectReferenceTryCompareAndSwap, objectReferenceWrite, offsetBulkCopy, offsetRead, offsetWrite, shortBulkCopy, shortRead, shortWrite, wordBulkCopy, wordRead, wordTryCompareAndSwap, wordWrite
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

private static final boolean DEBUG
See Also:
Constant Field Values

LOS_TOSPACE

private static final boolean LOS_TOSPACE
See Also:
Constant Field Values

LOS_FROMSPACE

private static final boolean LOS_FROMSPACE
See Also:
Constant Field Values

gcspy

private BumpPointer gcspy
Per-mutator allocator into GCspy's space

Constructor Detail

SSGCspyMutator

public SSGCspyMutator()
Method Detail

alloc

public Address alloc(int bytes,
                     int align,
                     int offset,
                     int allocator,
                     int site)
Allocate memory for an object.

Overrides:
alloc in class SSMutator
Parameters:
bytes - The number of bytes required for the object.
align - Required alignment for the object.
offset - Offset associated with the alignment.
allocator - The allocator associated with this request.
site - Allocation site
Returns:
The low address of the allocated chunk.

postAlloc

public void postAlloc(ObjectReference object,
                      ObjectReference typeRef,
                      int bytes,
                      int allocator)
Description copied from class: MutatorContext
Perform post-allocation actions. For many allocators none are required.

Overrides:
postAlloc in class SSMutator
Parameters:
object - The newly allocated object
typeRef - the type reference for the instance being created
bytes - The size of the space to be allocated (in bytes)
allocator - The allocator number to be used for this allocation

getAllocatorFromSpace

public Allocator getAllocatorFromSpace(Space space)
Description copied from class: MutatorContext
Return the allocator instance associated with a space space, for this plan instance.

Overrides:
getAllocatorFromSpace in class SSMutator
Parameters:
space - The space for which the allocator instance is desired.
Returns:
The allocator instance associated with this plan instance which is allocating into space, or null if no appropriate allocator can be established.

collectionPhase

public final void collectionPhase(short phaseId,
                                  boolean primary)
Perform a per-mutator collection phase. Before a collection, we need to discover After the semispace has been copied, we need to discover

Overrides:
collectionPhase in class SSMutator
Parameters:
phaseId - The unique phase identifier
primary - Should this thread be used to execute any single-threaded local operations?

gcspyGatherData

private void gcspyGatherData(int event)
Gather data for GCspy for the semispaces, the immortal space and the large object space.

This method sweeps the semispace under consideration to gather data. Alternatively and more efficiently, 'used space' can obviously be discovered in constant time simply by comparing the start and the end addresses of the semispace. However, per-object information can only be gathered by sweeping through the space and we do this here for tutorial purposes.

Parameters:
event - The event, either BEFORE_COLLECTION, SEMISPACE_COPIED or AFTER_COLLECTION

gatherImmortal

private void gatherImmortal(int event)
Gather data for the immortal space

Parameters:
event - The event, either BEFORE_COLLECTION, SEMISPACE_COPIED or AFTER_COLLECTION

debugSpaces

private void debugSpaces(CopySpace scannedSpace)
Debugging info for the semispaces

Parameters:
scannedSpace - the space to output debug for.

toSpaceDriver

private LinearSpaceDriver toSpaceDriver()
Returns:
the driver for toSpace