org.mmtk.plan.concurrent.marksweep
Class CMSMutator

java.lang.Object
  extended by org.mmtk.plan.MutatorContext
      extended by org.mmtk.plan.SimpleMutator
          extended by org.mmtk.plan.concurrent.ConcurrentMutator
              extended by org.mmtk.plan.concurrent.marksweep.CMSMutator
All Implemented Interfaces:
Constants

public class CMSMutator
extends ConcurrentMutator

This class implements per-mutator thread behavior and state for the CMS plan, which implements a full-heap concurrent mark-sweep collector.

FIXME The SegregatedFreeList class (and its descendants such as MarkSweepLocal) does not properly separate mutator and collector behaviors, so the ms field below should really not exist in this class as there is no collection-time allocation in this collector.

See Also:
CMS, CMSCollector, StopTheWorldMutator, MutatorContext

Field Summary
private  MarkSweepLocal ms
           
private  TraceWriteBuffer remset
           
 
Fields inherited from class org.mmtk.plan.concurrent.ConcurrentMutator
barrierActive, newMutatorBarrierActive
 
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
CMSMutator()
          Constructor
 
Method Summary
 Address alloc(int bytes, int align, int offset, int allocator, int site)
          Allocate memory for an object.
protected  void checkAndEnqueueReference(ObjectReference ref)
          Process a reference that may require being enqueued as part of a concurrent collection.
 void collectionPhase(short phaseId, boolean primary)
          Perform a per-mutator collection phase.
 void flushRememberedSets()
          Flush per-mutator remembered sets into the global remset pool.
 Allocator getAllocatorFromSpace(Space space)
          Return the allocator instance associated with a space space, for this plan instance.
private static CMS global()
           
 void postAlloc(ObjectReference ref, ObjectReference typeRef, int bytes, int allocator)
          Perform post-allocation actions.
 
Methods inherited from class org.mmtk.plan.concurrent.ConcurrentMutator
javaLangReferenceReadBarrier, objectReferenceBulkCopy, objectReferenceTryCompareAndSwap, objectReferenceWrite
 
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, getId, getLog, initMutator, intBulkCopy, intRead, intTryCompareAndSwap, intWrite, longBulkCopy, longRead, longTryCompareAndSwap, longWrite, objectReferenceNonHeapRead, objectReferenceNonHeapWrite, objectReferenceRead, 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

ms

private MarkSweepLocal ms

remset

private TraceWriteBuffer remset
Constructor Detail

CMSMutator

public CMSMutator()
Constructor

Method Detail

alloc

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

This class handles the default allocator from the mark sweep space, and delegates everything else to the superclass.

Overrides:
alloc in class MutatorContext
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 ref,
                      ObjectReference typeRef,
                      int bytes,
                      int allocator)
Perform post-allocation actions. For many allocators none are required.

Initialize the object header for objects in the mark-sweep space, and delegate to the superclass for other objects.

Overrides:
postAlloc in class MutatorContext
Parameters:
ref - 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 MutatorContext
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 void collectionPhase(short phaseId,
                            boolean primary)
Perform a per-mutator collection phase.

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

flushRememberedSets

public void flushRememberedSets()
Description copied from class: MutatorContext
Flush per-mutator remembered sets into the global remset pool.

Overrides:
flushRememberedSets in class MutatorContext

checkAndEnqueueReference

protected void checkAndEnqueueReference(ObjectReference ref)
Process a reference that may require being enqueued as part of a concurrent collection.

Specified by:
checkAndEnqueueReference in class ConcurrentMutator
Parameters:
ref - The reference to check.

global

private static CMS global()
Returns:
The active global plan as a Gen instance.