org.mmtk.plan.semispace.gcspy
Class SSGCspyCollector

java.lang.Object
  extended by org.mmtk.plan.CollectorContext
      extended by org.mmtk.plan.ParallelCollector
          extended by org.mmtk.plan.SimpleCollector
              extended by org.mmtk.plan.StopTheWorldCollector
                  extended by org.mmtk.plan.semispace.SSCollector
                      extended by org.mmtk.plan.semispace.gcspy.SSGCspyCollector
All Implemented Interfaces:
Constants

public class SSGCspyCollector
extends SSCollector

This class implements per-collector thread behavior and state for the SSGCspy plan.

See SSGCspy for an overview of the GC-spy mechanisms.

See Also:
SSCollector, SSGCspy, SSGCspyMutator, StopTheWorldCollector, CollectorContext, SimplePhase

Field Summary
private static boolean DEBUG
           
 
Fields inherited from class org.mmtk.plan.semispace.SSCollector
los, ss, trace
 
Fields inherited from class org.mmtk.plan.SimpleCollector
sanityLocal
 
Fields inherited from class org.mmtk.plan.ParallelCollector
group
 
Fields inherited from class org.mmtk.plan.CollectorContext
log
 
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
SSGCspyCollector()
          Constructor
 
Method Summary
protected  void checkAllDriversForRootAddress(Address addr)
          Pass a root to all drivers.
 void collectionPhase(short phaseId, boolean primary)
          Perform a (local) collection phase.
private  void debugSpaces(CopySpace scannedSpace)
          Print some debugging info
private  LinearSpaceDriver fromSpaceDriver()
           
private  void gcspyGatherData(int event)
          Gather data for GCspy for the semispaces only.
private static SSGCspy global()
           
(package private)  void resetRootStreams()
          Reset all root streams.
private  LinearSpaceDriver toSpaceDriver()
           
 
Methods inherited from class org.mmtk.plan.semispace.SSCollector
allocCopy, getCurrentTrace, isSemiSpaceObject, postCopy
 
Methods inherited from class org.mmtk.plan.StopTheWorldCollector
collect, concurrentCollect, concurrentCollectionPhase
 
Methods inherited from class org.mmtk.plan.ParallelCollector
parallelWorkerCount, parallelWorkerOrdinal, park, rendezvous, run
 
Methods inherited from class org.mmtk.plan.CollectorContext
copyCheckAllocator, getId, getLog, initCollector
 
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
Constructor Detail

SSGCspyCollector

public SSGCspyCollector()
Constructor

Method Detail

collectionPhase

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

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

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

debugSpaces

private void debugSpaces(CopySpace scannedSpace)
Print some debugging info

Parameters:
scannedSpace -

resetRootStreams

void resetRootStreams()
Reset all root streams.


checkAllDriversForRootAddress

protected void checkAllDriversForRootAddress(Address addr)
Pass a root to all drivers.

Parameters:
addr - The Address of the object to be checked

global

private static SSGCspy global()
Returns:
The active global plan as an SSGCspy instance.

toSpaceDriver

private LinearSpaceDriver toSpaceDriver()
Returns:
the driver for toSpace

fromSpaceDriver

private LinearSpaceDriver fromSpaceDriver()
Returns:
the driver for fromSpace