org.mmtk.plan.immix
Class ImmixDefragTraceLocal

java.lang.Object
  extended by org.mmtk.plan.TransitiveClosure
      extended by org.mmtk.plan.TraceLocal
          extended by org.mmtk.plan.immix.ImmixDefragTraceLocal
All Implemented Interfaces:
Constants

public final class ImmixDefragTraceLocal
extends TraceLocal

This class implements the thread-local functionality for a defragmenting transitive closure over an immix space.


Field Summary
private  ObjectReferenceDeque modBuffer
          Instance fields
 
Fields inherited from class org.mmtk.plan.TraceLocal
rootLocations, values
 
Fields inherited from class org.mmtk.plan.TransitiveClosure
specializedScan
 
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
ImmixDefragTraceLocal(Trace trace, ObjectReferenceDeque modBuffer)
          Constructor
 
Method Summary
 boolean isLive(ObjectReference object)
          Is the specified object live?
protected  void processRememberedSets()
          Process any remembered set entries.
protected  void scanObject(ObjectReference object)
          Collectors that move objects must override this method.
 ObjectReference traceObject(ObjectReference object)
          This method is the core method during the trace of the object graph.
 boolean willNotMoveInCurrentCollection(ObjectReference object)
          Return true if this object is guaranteed not to move during this collection (i.e. this object is defintely not an unforwarded object).
 
Methods inherited from class org.mmtk.plan.TraceLocal
completeTrace, flush, getForwardedFinalizable, getForwardedReference, getForwardedReferenceType, getForwardedReferent, incrementalTrace, isReachable, isReferentLive, logMessage, overwriteReferenceDuringTrace, prepare, processEdge, processInteriorEdge, processNode, processRootEdge, processRoots, readyToFinalize, release, reportDelayedRootEdge, retainForFinalize, retainReferent, traceObject
 
Methods inherited from class org.mmtk.plan.TransitiveClosure
getSpecializedScanClass, registerSpecializedScan
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

modBuffer

private final ObjectReferenceDeque modBuffer
Instance fields

Constructor Detail

ImmixDefragTraceLocal

public ImmixDefragTraceLocal(Trace trace,
                             ObjectReferenceDeque modBuffer)
Constructor

Parameters:
trace - TODO
modBuffer - TODO
Method Detail

isLive

public boolean isLive(ObjectReference object)
Is the specified object live?

Overrides:
isLive in class TraceLocal
Parameters:
object - The object.
Returns:
true if the object is live.

traceObject

public ObjectReference traceObject(ObjectReference object)
This method is the core method during the trace of the object graph. The role of this method is to:
  1. Ensure the traced object is not collected.
  2. If this is the first visit to the object enqueue it to be scanned.
  3. Return the forwarded reference to the object.

In this instance, we refer objects in the mark-sweep space to the immixSpace for tracing, and defer to the superclass for all others.

Overrides:
traceObject in class TraceLocal
Parameters:
object - The object to be traced.
Returns:
The new reference to the same object instance.

willNotMoveInCurrentCollection

public boolean willNotMoveInCurrentCollection(ObjectReference object)
Return true if this object is guaranteed not to move during this collection (i.e. this object is defintely not an unforwarded object).

Overrides:
willNotMoveInCurrentCollection in class TraceLocal
Parameters:
object -
Returns:
true if this object is guaranteed not to move during this collection.

scanObject

protected void scanObject(ObjectReference object)
Description copied from class: TraceLocal
Collectors that move objects must override this method. It performs the deferred scanning of objects which are forwarded during bootstrap of each copying collection. Because of the complexities of the collection bootstrap (such objects are generally themselves gc-critical), the forwarding and scanning of the objects must be dislocated. It is an error for a non-moving collector to call this method.

Overrides:
scanObject in class TraceLocal
Parameters:
object - The forwarded object to be scanned

processRememberedSets

protected void processRememberedSets()
Process any remembered set entries. This means enumerating the mod buffer and for each entry, marking the object as unlogged (we don't enqueue for scanning since we're doing a full heap GC).

Overrides:
processRememberedSets in class TraceLocal