org.mmtk.policy
Class MarkCompactSpace

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

public final class MarkCompactSpace
extends Space
implements Constants

This class implements functionality for a simple sliding mark-compact space.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.mmtk.policy.Space
Space.SpaceVisitor
 
Field Summary
private static Offset FORWARDING_POINTER_OFFSET
           
static int GC_HEADER_WORDS_REQUIRED
           
private static Word GC_MARK_BIT_MASK
           
static int GLOBAL_GC_BITS_REQUIRED
           
static int LOCAL_GC_BITS_REQUIRED
           
private static Lock lock
           
private  Address regionList
          The list of occupied regions
 
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
MarkCompactSpace(String name, VMRequest vmRequest)
          The caller specifies the region of virtual memory to be used for this space.
 
Method Summary
 void append(Address region)
          Append a region or list of regions to the global list
static void appendRegion(Address listHead, Address region)
           
static void clearForwardingPointer(ObjectReference object)
          Non-atomic clear of forwarding pointer word (assumption, thread doing the set has done attempt to forward and owns the right to copy the object)
static void clearMark(ObjectReference object)
          Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.
static ObjectReference getForwardingPointer(ObjectReference object)
          Non-atomic read of forwarding pointer
 Address getNextRegion()
           
 void initializeHeader(ObjectReference object)
          Initialise the header of the object.
 boolean isLive(ObjectReference object)
          Is the object in this space alive?
static boolean isMarked(ObjectReference object)
          Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.
 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()
          Prepare for a collection
 void release()
          Release after a collection
 void release(Address start)
          Release a unit of allocation (a page or pages)
static void setForwardingPointer(ObjectReference object, ObjectReference ptr)
          Non-atomic write of forwarding pointer word (assumption, thread doing the set has done attempt to forward and owns the right to copy the object)
private static boolean testAndClearMark(ObjectReference object)
          Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.
static boolean testAndMark(ObjectReference object)
          Used to mark boot image objects during a parallel scan of objects during GC.
static boolean toBeCompacted(ObjectReference object)
          Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.
 ObjectReference traceForwardObject(TraceLocal trace, ObjectReference object)
          Trace an object under a copying collection policy.
 ObjectReference traceMarkObject(TraceLocal trace, ObjectReference object)
          Trace an object under a copying collection policy.
 ObjectReference traceObject(TransitiveClosure trace, ObjectReference object)
          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, 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

GC_MARK_BIT_MASK

private static final Word GC_MARK_BIT_MASK

FORWARDING_POINTER_OFFSET

private static final Offset FORWARDING_POINTER_OFFSET

lock

private static final Lock lock

regionList

private Address regionList
The list of occupied regions

Constructor Detail

MarkCompactSpace

public MarkCompactSpace(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

prepare

public void prepare()
Prepare for a collection


release

public void release()
Release after a collection


release

public void release(Address start)
Release a unit of allocation (a page or pages)

In this case we do nothing ecause we only release pages enmasse.

Specified by:
release in class Space
Parameters:
start - The address of the start of the region to be released

traceObject

public ObjectReference traceObject(TransitiveClosure trace,
                                   ObjectReference object)
Trace an object under a copying collection policy. If the object is already copied, the copy is returned. Otherwise, a copy is created and returned. In either case, the object will be marked on return.

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

traceMarkObject

public ObjectReference traceMarkObject(TraceLocal trace,
                                       ObjectReference object)
Trace an object under a copying collection policy. If the object is already copied, the copy is returned. Otherwise, a copy is created and returned. In either case, the object will be marked on return.

Parameters:
trace - The trace being conducted.
object - The object to be forwarded.
Returns:
The forwarded object.

traceForwardObject

public ObjectReference traceForwardObject(TraceLocal trace,
                                          ObjectReference object)
Trace an object under a copying collection policy. If the object is already copied, the copy is returned. Otherwise, a copy is created and returned. In either case, the object will be marked on return.

Parameters:
trace - The trace being conducted.
object - The object to be forwarded.
Returns:
The forwarded object.

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 the object is live.

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

getForwardingPointer

public static ObjectReference getForwardingPointer(ObjectReference object)
Non-atomic read of forwarding pointer

Parameters:
object - The object whose forwarding pointer is to be read
Returns:
The forwarding pointer stored in object's header.

initializeHeader

public void initializeHeader(ObjectReference object)
Initialise the header of the object.

Parameters:
object - The object to initialise

testAndMark

public static boolean testAndMark(ObjectReference object)
Used to mark boot image objects during a parallel scan of objects during GC.

Parameters:
object - The object to be marked
Returns:
true if marking was done.

isMarked

public static boolean isMarked(ObjectReference object)
Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.

Parameters:
object - The object to be marked

testAndClearMark

private static boolean testAndClearMark(ObjectReference object)
Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.

Parameters:
object - The object to be marked

toBeCompacted

public static boolean toBeCompacted(ObjectReference object)
Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.

Parameters:
object - The object to be marked

clearMark

public static void clearMark(ObjectReference object)
Used to mark boot image objects during a parallel scan of objects during GC Returns true if marking was done.

Parameters:
object - The object to be marked

setForwardingPointer

public static void setForwardingPointer(ObjectReference object,
                                        ObjectReference ptr)
Non-atomic write of forwarding pointer word (assumption, thread doing the set has done attempt to forward and owns the right to copy the object)

Parameters:
object - The object whose forwarding pointer is to be set
ptr - The forwarding pointer to be stored in the object's forwarding word

clearForwardingPointer

public static void clearForwardingPointer(ObjectReference object)
Non-atomic clear of forwarding pointer word (assumption, thread doing the set has done attempt to forward and owns the right to copy the object)

Parameters:
object - The object whose forwarding pointer is to be set

getNextRegion

public Address getNextRegion()
Returns:
A region of this space that has net yet been compacted during the current collection

append

public void append(Address region)
Append a region or list of regions to the global list

Parameters:
region -

appendRegion

public static void appendRegion(Address listHead,
                                Address region)