org.mmtk.policy
Class CopySpace

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

public final class CopySpace
extends Space
implements Constants

This class implements tracing functionality for a simple copying space. Since no state needs to be held globally or locally, all methods are static.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.mmtk.policy.Space
Space.SpaceVisitor
 
Field Summary
private  boolean fromSpace
           
static int GC_HEADER_WORDS_REQUIRED
           
static int GLOBAL_GC_BITS_REQUIRED
           
static int LOCAL_GC_BITS_REQUIRED
           
private static int META_DATA_PAGES_PER_REGION
           
 
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
CopySpace(String name, boolean fromSpace, boolean zeroed, VMRequest vmRequest)
          The caller specifies the region of virtual memory to be used for this space.
CopySpace(String name, boolean fromSpace, VMRequest vmRequest)
          The caller specifies the region of virtual memory to be used for this space.
 
Method Summary
 boolean isFromSpace()
           
 boolean isLive(ObjectReference object)
          Return true if this object is live in this GC
 boolean isMovable()
          fromSpace CopySpace can always move, toSpace will not move during current GC
 boolean isReachable(ObjectReference object)
          Has the object in this space been reached during the current collection.
 void postAlloc(ObjectReference object)
          Perform any required post-allocation initialization Nothing to be done in this case
 void prepare(boolean fromSpace)
          Prepare this space instance for a collection.
 void release()
          Release this copy space after a collection.
 void release(Address start)
          Release an allocated page or pages.
 ObjectReference traceObject(TransitiveClosure trace, ObjectReference object)
          Trace an object under a copying collection policy.
 ObjectReference traceObject(TransitiveClosure trace, ObjectReference object, int allocator)
          Trace an object under a copying collection policy.
 
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, 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

META_DATA_PAGES_PER_REGION

private static final int META_DATA_PAGES_PER_REGION

fromSpace

private boolean fromSpace
Constructor Detail

CopySpace

public CopySpace(String name,
                 boolean fromSpace,
                 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)
fromSpace - The does this instance start life as from-space (or to-space)?
vmRequest - An object describing the virtual memory requested.

CopySpace

public CopySpace(String name,
                 boolean fromSpace,
                 boolean zeroed,
                 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)
fromSpace - The does this instance start life as from-space
zeroed - if true, allocations return zeroed memory. (or to-space)?
vmRequest - An object describing the virtual memory requested.
Method Detail

isFromSpace

public boolean isFromSpace()

isMovable

public boolean isMovable()
fromSpace CopySpace can always move, toSpace will not move during current GC

Overrides:
isMovable in class Space

prepare

public void prepare(boolean fromSpace)
Prepare this space instance for a collection. Set the "fromSpace" field according to whether this space is the source or target of the collection.

Parameters:
fromSpace - Set the fromSpace field to this value

release

public void release()
Release this copy space after a collection. This means releasing all pages associated with this (now empty) space.


release

public void release(Address start)
Release an allocated page or pages. In this case we do nothing because we only release pages enmasse.

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 an object under a copying collection policy.

We use a tri-state algorithm to deal with races to forward the object. The tracer must wait if the object is concurrently being forwarded by another thread.

If the object is already forwarded, the copy is returned. Otherwise, the object is forwarded and the copy is returned.

Specified by:
traceObject in class Space
Parameters:
trace - The trace being conducted.
object - The object to be forwarded.
Returns:
The forwarded object.

traceObject

public ObjectReference traceObject(TransitiveClosure trace,
                                   ObjectReference object,
                                   int allocator)
Trace an object under a copying collection policy.

We use a tri-state algorithm to deal with races to forward the object. The tracer must wait if the object is concurrently being forwarded by another thread.

If the object is already forwarded, the copy is returned. Otherwise, the object is forwarded and the copy is returned.

Parameters:
trace - The trace being conducted.
object - The object to be forwarded.
allocator - The allocator to use when copying.
Returns:
The forwarded object.

isLive

public boolean isLive(ObjectReference object)
Return true if this object is live in this GC

Specified by:
isLive in class Space
Parameters:
object - The object in question
Returns:
true if this object is live in this GC (has it been forwarded?)

isReachable

public boolean isReachable(ObjectReference object)
Description copied from class: Space
Has the object in this space been reached during the current collection. This is used for GC Tracing.

Overrides:
isReachable in class Space
Parameters:
object - The object reference.
Returns:
true if the object is reachable.

postAlloc

public void postAlloc(ObjectReference object)
Perform any required post-allocation initialization Nothing to be done in this case

Parameters:
object - the object ref to the storage to be initialized