org.mmtk.policy
Class ExplicitFreeListSpace

java.lang.Object
  extended by org.mmtk.policy.Space
      extended by org.mmtk.policy.SegregatedFreeListSpace
          extended by org.mmtk.policy.ExplicitFreeListSpace
All Implemented Interfaces:
Constants

public final class ExplicitFreeListSpace
extends SegregatedFreeListSpace
implements Constants

Each instance of this class corresponds to one *space*. Each of the instance methods of this class may be called by any thread (i.e. synchronization must be explicit in any instance or class method). This contrasts with the MarkSweepLocal, where instances correspond to *plan* instances and therefore to kernel threads. Thus unlike this class, synchronization is not necessary in the instance methods of MarkSweepLocal.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.mmtk.policy.SegregatedFreeListSpace
SegregatedFreeListSpace.Sweeper
 
Nested classes/interfaces inherited from class org.mmtk.policy.Space
Space.SpaceVisitor
 
Field Summary
static int GC_HEADER_WORDS_REQUIRED
           
static int GLOBAL_GC_BITS_REQUIRED
           
static int LOCAL_GC_BITS_REQUIRED
           
 
Fields inherited from class org.mmtk.policy.SegregatedFreeListSpace
availableBlockHead, consumedBlockHead, flushedBlockHead, LAZY_SWEEP, lock, MAX_CELL_SIZE, MAX_CELLS, MAX_FREELIST_OBJECT_BYTES, META_DATA_PAGES_PER_REGION_NO_BITMAP, META_DATA_PAGES_PER_REGION_WITH_BITMAP, MIN_CELLS, WORST_CASE_FRAGMENTATION
 
Fields inherited from class org.mmtk.policy.Space
AVAILABLE_BYTES, AVAILABLE_END, AVAILABLE_PAGES, AVAILABLE_START, BYTES_IN_CHUNK, contiguous, descriptor, extent, headDiscontiguousRegion, HEAP_END, HEAP_START, immortal, LOG_ADDRESS_SPACE, LOG_BYTES_IN_CHUNK, MAX_CHUNKS, MAX_SPACES, movable, PAGES_IN_CHUNK, pr, start, zeroed
 
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
ExplicitFreeListSpace(String name, VMRequest vmRequest)
          The caller specifies the region of virtual memory to be used for this space.
 
Method Summary
protected  Address advanceToBlock(Address block, int sizeClass)
          Prepare the next block in the free block list for use by the free list allocator.
 void free(ObjectReference object)
          Free an object.
 boolean isLive(ObjectReference object)
          Is the object in this space alive?
protected  boolean maintainSideBitmap()
          Should SegregatedFreeListSpace manage a side bitmap to keep track of live objects?
protected  void notifyNewBlock(Address block, int sizeClass)
          Notify that a new block has been installed.
 void prepare()
          Prepare for a new collection increment.
protected  boolean preserveFreeList()
          Do we need to preserve free lists as we move blocks around.
 void release()
          A new collection increment has completed.
 void release(Address start)
          Release an allocated page or pages
 ObjectReference traceObject(TransitiveClosure trace, ObjectReference object)
          Trace a reference to an object under a mark sweep collection policy.
 
Methods inherited from class org.mmtk.policy.SegregatedFreeListSpace
clearAllBlockMarks, clearBlockMark, clearLiveBit, clearLiveBit, clearLiveBits, consumeBlocks, containsLiveCell, flushAvailableBlocks, getAllocationBlock, getBaseCellSize, getFreeList, getSizeClass, isCellLive, liveBitSet, liveBitSet, makeFreeList, markBlock, markBlock, parallelSweepCells, reclaimCellForObject, returnBlock, returnConsumedBlock, setFreeList, sizeClassCount, sweepBlock, sweepCells, sweepCells, sweepConsumedBlocks, testAndSetLiveBit, unsyncClearLiveBit, unsyncClearLiveBit, unsyncSetLiveBit, zeroLiveBits
 
Methods inherited from class org.mmtk.policy.Space
acquire, availablePhysicalPages, chunkAlign, chunkAlign, committedPages, cumulativeCommittedPages, eagerlyMmapMMTkContiguousSpaces, eagerlyMmapMMTkDiscontiguousSpaces, eagerlyMmapMMTkSpaces, getDescriptor, getDiscontigEnd, getDiscontigStart, getExtent, getFracAvailable, getHeadDiscontiguousRegion, getIndex, getName, getSpaceForAddress, getSpaceForObject, getStart, growDiscontiguousSpace, growSpace, isImmortal, isImmortal, isInSpace, isInSpace, isMappedAddress, isMappedObject, isMovable, isMovable, isReachable, printUsageMB, printUsagePages, printVMMap, releaseAllChunks, releaseDiscontiguousChunks, requiredChunks, reservedPages, setZeroingApproach, skipConcurrentZeroing, triggerConcurrentZeroing, visitSpaces
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOCAL_GC_BITS_REQUIRED

public static final int LOCAL_GC_BITS_REQUIRED
See Also:
Constant Field Values

GLOBAL_GC_BITS_REQUIRED

public static final int GLOBAL_GC_BITS_REQUIRED
See Also:
Constant Field Values

GC_HEADER_WORDS_REQUIRED

public static final int GC_HEADER_WORDS_REQUIRED
See Also:
Constant Field Values
Constructor Detail

ExplicitFreeListSpace

public ExplicitFreeListSpace(String name,
                             VMRequest vmRequest)
The caller specifies the region of virtual memory to be used for this space. If this region conflicts with an existing space, then the constructor will fail.

Parameters:
name - The name of this space (used when printing error messages etc)
vmRequest - An object describing the virtual memory requested.
Method Detail

maintainSideBitmap

protected boolean maintainSideBitmap()
Description copied from class: SegregatedFreeListSpace
Should SegregatedFreeListSpace manage a side bitmap to keep track of live objects?

Specified by:
maintainSideBitmap in class SegregatedFreeListSpace

preserveFreeList

protected boolean preserveFreeList()
Description copied from class: SegregatedFreeListSpace
Do we need to preserve free lists as we move blocks around.

Specified by:
preserveFreeList in class SegregatedFreeListSpace

advanceToBlock

protected Address advanceToBlock(Address block,
                                 int sizeClass)
Prepare the next block in the free block list for use by the free list allocator. In the case of lazy sweeping this involves sweeping the available cells. The sweeping operation must ensure that cells are pre-zeroed, as this method must return pre-zeroed cells.

Specified by:
advanceToBlock in class SegregatedFreeListSpace
Parameters:
block - The block to be prepared for use
sizeClass - The size class of the block
Returns:
The address of the first pre-zeroed cell in the free list for this block, or zero if there are no available cells.

notifyNewBlock

protected void notifyNewBlock(Address block,
                              int sizeClass)
Description copied from class: SegregatedFreeListSpace
Notify that a new block has been installed. This is to ensure that appropriate collection state can be initialized for the block

Overrides:
notifyNewBlock in class SegregatedFreeListSpace
Parameters:
block - The new block
sizeClass - The block's sizeclass.

free

public void free(ObjectReference object)
Free an object.

Parameters:
object - The object to be freed.

prepare

public void prepare()
Prepare for a new collection increment.


release

public void release()
A new collection increment has completed.


release

public void release(Address start)
Release an allocated page or pages

Specified by:
release in class Space
Parameters:
start - The address of the start of the page or pages

traceObject

public ObjectReference traceObject(TransitiveClosure trace,
                                   ObjectReference object)
Trace a reference to an object under a mark sweep collection policy. If the object header is not already marked, mark the object in either the bitmap or by moving it off the treadmill, and enqueue the object for subsequent processing. The object is marked as (an atomic) side-effect of checking whether already marked.

Specified by:
traceObject in class Space
Parameters:
object - The object to be traced.
trace - The trace being conducted.
Returns:
The object (there is no object forwarding in this collector, so we always return the same object: this could be a void method but for compliance to a more general interface).

isLive

public boolean isLive(ObjectReference object)
Description copied from class: Space
Is the object in this space alive?

Specified by:
isLive in class Space
Parameters:
object - The object reference.
Returns:
true if this object is known to be live (i.e. it is marked)