org.mmtk.policy
Class MarkSweepLocal

java.lang.Object
  extended by org.mmtk.utility.alloc.Allocator
      extended by org.mmtk.utility.alloc.SegregatedFreeList<S>
          extended by org.mmtk.utility.alloc.SegregatedFreeListLocal<MarkSweepSpace>
              extended by org.mmtk.policy.MarkSweepLocal
All Implemented Interfaces:
Constants

public final class MarkSweepLocal
extends SegregatedFreeListLocal<MarkSweepSpace>
implements Constants

This class implements unsynchronized (local) elements of a mark-sweep collector. Allocation is via the segregated free list (@see SegregatedFreeList). Marking is done using both a bit in each header's object word, and a mark bitmap. Sweeping is performed lazily.

A free list block is a contiguous region of memory containing cells of a single size class, and is a construct of the SegregatedFreeList. This class extends the block to include a mark bitmap. During the mark phase, if an object is encountered with the mark bit in its header unset, it is set and the mark bit in the block header corresponding to that object is set. The rationale behind this approach is that testing (and setting) the mark bit in the object header is cheap, while using a bitmap makes sweeping more efficient. This approach maximizes the speed of the common case when marking, while also allowing for fast sweeping, with minimal space overhead (2 bits per object).

See Also:
SegregatedFreeList, MarkSweepSpace

Field Summary
 
Fields inherited from class org.mmtk.utility.alloc.SegregatedFreeListLocal
currentBlock
 
Fields inherited from class org.mmtk.utility.alloc.SegregatedFreeList
freeList, space
 
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
MarkSweepLocal(MarkSweepSpace space)
          Constructor
 
Method Summary
 void prepare()
          Prepare for a collection.
 void release()
          Finish up after a collection.
 
Methods inherited from class org.mmtk.utility.alloc.SegregatedFreeListLocal
allocSlowOnce, flush
 
Methods inherited from class org.mmtk.utility.alloc.SegregatedFreeList
alloc, getSpace
 
Methods inherited from class org.mmtk.utility.alloc.Allocator
alignAllocation, alignAllocation, alignAllocationNoFill, allocSlow, allocSlowInline, determineCollectionAttempts, fillAlignmentGap, getMaximumAlignedSize, getMaximumAlignedSize
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MarkSweepLocal

public MarkSweepLocal(MarkSweepSpace space)
Constructor

Parameters:
space - The mark-sweep space to which this allocator instances is bound.
Method Detail

prepare

public void prepare()
Prepare for a collection. If paranoid, perform a sanity check.


release

public void release()
Finish up after a collection.