org.mmtk.plan.concurrent
Class ConcurrentMutator

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

public abstract class ConcurrentMutator
extends SimpleMutator

This class implements per-mutator thread behavior and state for a simple whole-heap concurrent collector.

See Also:
Concurrent, ConcurrentCollector, StopTheWorldMutator, MutatorContext

Field Summary
protected  boolean barrierActive
           
static boolean 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
protected ConcurrentMutator()
           
 
Method Summary
protected abstract  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.
 ObjectReference javaLangReferenceReadBarrier(ObjectReference ref)
          Read a reference type.
 boolean objectReferenceBulkCopy(ObjectReference src, Offset srcOffset, ObjectReference dst, Offset dstOffset, int bytes)
          A number of references are about to be copied from object src to object dst (as in an array copy).
 boolean objectReferenceTryCompareAndSwap(ObjectReference src, Address slot, ObjectReference old, ObjectReference tgt, Word metaDataA, Word metaDataB, int mode)
          Attempt to atomically exchange the value in the given slot with the passed replacement value.
 void objectReferenceWrite(ObjectReference src, Address slot, ObjectReference tgt, Word metaDataA, Word metaDataB, int mode)
          Write an object reference.
 
Methods inherited from class org.mmtk.plan.MutatorContext
addressBulkCopy, addressRead, addressTryCompareAndSwap, addressWrite, alloc, assertRemsetsFlushed, booleanBulkCopy, booleanRead, booleanWrite, byteBulkCopy, byteRead, byteWrite, charBulkCopy, charRead, charWrite, checkAllocator, deinitMutator, doubleBulkCopy, doubleRead, doubleWrite, extentBulkCopy, extentRead, extentWrite, floatBulkCopy, floatRead, floatWrite, flush, flushRememberedSets, getAllocatorFromSpace, getId, getLog, initMutator, intBulkCopy, intRead, intTryCompareAndSwap, intWrite, longBulkCopy, longRead, longTryCompareAndSwap, longWrite, objectReferenceNonHeapRead, objectReferenceNonHeapWrite, objectReferenceRead, offsetBulkCopy, offsetRead, offsetWrite, postAlloc, 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

newMutatorBarrierActive

public static boolean newMutatorBarrierActive

barrierActive

protected volatile boolean barrierActive
Constructor Detail

ConcurrentMutator

protected ConcurrentMutator()
Method Detail

collectionPhase

public void collectionPhase(short phaseId,
                            boolean primary)
Perform a per-mutator collection phase.

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

objectReferenceWrite

public void objectReferenceWrite(ObjectReference src,
                                 Address slot,
                                 ObjectReference tgt,
                                 Word metaDataA,
                                 Word metaDataB,
                                 int mode)
Write an object reference. Take appropriate write barrier actions.

By default do nothing, override if appropriate.

In this case we employ a Yuasa style snapshot barrier.

Overrides:
objectReferenceWrite in class MutatorContext
Parameters:
src - The object into which the new reference will be stored
slot - The address into which the new reference will be stored.
tgt - The value of the new reference
metaDataA - A value that assists the host VM in creating a store
metaDataB - A value that assists the host VM in creating a store
mode - The context in which the store occurred

objectReferenceTryCompareAndSwap

public boolean objectReferenceTryCompareAndSwap(ObjectReference src,
                                                Address slot,
                                                ObjectReference old,
                                                ObjectReference tgt,
                                                Word metaDataA,
                                                Word metaDataB,
                                                int mode)
Description copied from class: MutatorContext
Attempt to atomically exchange the value in the given slot with the passed replacement value. If a new reference is created, we must then take appropriate write barrier actions.

By default do nothing, override if appropriate.

Overrides:
objectReferenceTryCompareAndSwap in class MutatorContext
Parameters:
src - The object into which the new reference will be stored
slot - The address into which the new reference will be stored.
old - The old reference to be swapped out
tgt - The target of the new reference
metaDataA - A value that assists the host VM in creating a store
metaDataB - A value that assists the host VM in creating a store
mode - The context in which the store occurred
Returns:
True if the swap was successful.

objectReferenceBulkCopy

public boolean objectReferenceBulkCopy(ObjectReference src,
                                       Offset srcOffset,
                                       ObjectReference dst,
                                       Offset dstOffset,
                                       int bytes)
A number of references are about to be copied from object src to object dst (as in an array copy). Thus, dst is the mutated object. Take appropriate write barrier actions.

Overrides:
objectReferenceBulkCopy in class MutatorContext
Parameters:
src - The source of the values to be copied
srcOffset - The offset of the first source address, in bytes, relative to src (in principle, this could be negative).
dst - The mutated object, i.e. the destination of the copy.
dstOffset - The offset of the first destination address, in bytes relative to tgt (in principle, this could be negative).
bytes - The size of the region being copied, in bytes.
Returns:
true if the update was performed by the barrier, false if left to the caller (always false in this case).

javaLangReferenceReadBarrier

public ObjectReference javaLangReferenceReadBarrier(ObjectReference ref)
Description copied from class: MutatorContext
Read a reference type. In a concurrent collector this may involve adding the referent to the marking queue.

Overrides:
javaLangReferenceReadBarrier in class MutatorContext
Parameters:
ref - The referent being read.
Returns:
The new referent.

checkAndEnqueueReference

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

Parameters:
ref - The reference to check.