org.mmtk.policy
Class LargeObjectSpace

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

public final class LargeObjectSpace
extends BaseLargeObjectSpace

Each instance of this class corresponds to one explicitly managed large object space.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.mmtk.policy.Space
Space.SpaceVisitor
 
Field Summary
static int GLOBAL_GC_BITS_REQUIRED
           
private  boolean inNurseryGC
           
static int LOCAL_GC_BITS_REQUIRED
           
private static byte LOS_BIT_MASK
           
private static byte MARK_BIT
           
private  byte markState
           
private static byte NURSERY_BIT
           
private  Treadmill treadmill
           
 
Fields inherited from class org.mmtk.policy.BaseLargeObjectSpace
PAGE_MASK
 
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
LargeObjectSpace(String name, boolean zeroed, VMRequest vmRequest)
          The caller specifies the region of virtual memory to be used for this space.
LargeObjectSpace(String name, VMRequest vmRequest)
          The caller specifies the region of virtual memory to be used for this space.
 
Method Summary
protected  int cellHeaderSize()
          Return the size of the per-cell header for cells of a given class size.
 Treadmill getTreadmill()
          This is the treadmill used by the large object space.
 void initializeHeader(ObjectReference object, boolean alloc)
          Perform any required initialization of the GC portion of the header.
private  void internalMarkObject(ObjectReference object, boolean nurseryObject)
          An object has been marked (identifiged as live).
private  boolean isInNursery(ObjectReference object)
          Return true if the object is in the logical nursery
 boolean isLive(ObjectReference object)
          Is the object in this space alive?
 void prepare(boolean fullHeap)
          Prepare for a new collection increment.
 void release(Address first)
          Release a unit of allocation (a page or pages)
 void release(boolean fullHeap)
          A new collection increment has completed.
protected  int superPageHeaderSize()
          Return the size of the per-superpage header required by this system.
private  void sweepLargePages(boolean sweepNursery)
          Sweep through the large pages, releasing all superpages on the "from space" treadmill.
private  boolean testAndMark(ObjectReference object, byte value)
          Atomically attempt to set the mark bit of an object.
private  boolean testMarkBit(ObjectReference object, byte value)
          Return true if the mark bit for an object has the given value.
 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.BaseLargeObjectSpace
free, getHeaderSize, getSize, getSuperPage
 
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

MARK_BIT

private static final byte MARK_BIT
See Also:
Constant Field Values

NURSERY_BIT

private static final byte NURSERY_BIT
See Also:
Constant Field Values

LOS_BIT_MASK

private static final byte LOS_BIT_MASK
See Also:
Constant Field Values

markState

private byte markState

inNurseryGC

private boolean inNurseryGC

treadmill

private final Treadmill treadmill
Constructor Detail

LargeObjectSpace

public LargeObjectSpace(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.

LargeObjectSpace

public LargeObjectSpace(String name,
                        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)
zeroed - if true, allocations return zeroed memory.
vmRequest - An object describing the virtual memory requested.
Method Detail

prepare

public void prepare(boolean fullHeap)
Prepare for a new collection increment. For the mark-sweep collector we must flip the state of the mark bit between collections.


release

public void release(boolean fullHeap)
A new collection increment has completed. For the mark-sweep collector this means we can perform the sweep phase.


sweepLargePages

private void sweepLargePages(boolean sweepNursery)
Sweep through the large pages, releasing all superpages on the "from space" treadmill.


release

public void release(Address first)
Description copied from class: Space
Release a unit of allocation (a page or pages)

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

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:
trace - The trace being conducted.
object - The object to be traced.
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 in question
Returns:
true if this object is known to be live (i.e. it is marked)

internalMarkObject

private void internalMarkObject(ObjectReference object,
                                boolean nurseryObject)
An object has been marked (identifiged as live). Large objects are added to the to-space treadmill, while all other objects will have a mark bit set in the superpage header.

Parameters:
object - The object which has been marked.

initializeHeader

public void initializeHeader(ObjectReference object,
                             boolean alloc)
Perform any required initialization of the GC portion of the header.

Parameters:
object - the object ref to the storage to be initialized
alloc - is this initialization occurring due to (initial) allocation (true) or due to copying (false)?

testAndMark

private boolean testAndMark(ObjectReference object,
                            byte value)
Atomically attempt to set the mark bit of an object. Return true if successful, false if the mark bit was already set.

Parameters:
object - The object whose mark bit is to be written
value - The value to which the mark bit will be set

testMarkBit

private boolean testMarkBit(ObjectReference object,
                            byte value)
Return true if the mark bit for an object has the given value.

Parameters:
object - The object whose mark bit is to be tested
value - The value against which the mark bit will be tested
Returns:
true if the mark bit for the object has the given value.

isInNursery

private boolean isInNursery(ObjectReference object)
Return true if the object is in the logical nursery

Parameters:
object - The object whose status is to be tested
Returns:
true if the object is in the logical nursery

superPageHeaderSize

protected int superPageHeaderSize()
Description copied from class: BaseLargeObjectSpace
Return the size of the per-superpage header required by this system. In this case it is just the underlying superpage header size.

Specified by:
superPageHeaderSize in class BaseLargeObjectSpace
Returns:
The size of the per-superpage header required by this system.

cellHeaderSize

protected int cellHeaderSize()
Description copied from class: BaseLargeObjectSpace
Return the size of the per-cell header for cells of a given class size.

Specified by:
cellHeaderSize in class BaseLargeObjectSpace
Returns:
The size of the per-cell header for cells of a given class size.

getTreadmill

public Treadmill getTreadmill()
This is the treadmill used by the large object space. Note that it depends on the specific local in use whether this is being used.

Returns:
The treadmill associated with this large object space.