org.mmtk.policy
Class BaseLargeObjectSpace

java.lang.Object
  extended by org.mmtk.policy.Space
      extended by org.mmtk.policy.BaseLargeObjectSpace
All Implemented Interfaces:
Constants
Direct Known Subclasses:
ExplicitLargeObjectSpace, LargeObjectSpace

public abstract class BaseLargeObjectSpace
extends Space
implements Constants

Each instance of this class corresponds to one treadmill 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 stands in contrast to TreadmillLocal, which is instantiated and called on a per-thread basis, where each instance of TreadmillLocal corresponds to one thread operating over one space.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.mmtk.policy.Space
Space.SpaceVisitor
 
Field Summary
protected static Word 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
BaseLargeObjectSpace(String name, boolean zeroed, VMRequest vmRequest)
          The caller specifies the region of virtual memory to be used for this space.
 
Method Summary
protected abstract  int cellHeaderSize()
          Return the size of the per-cell header for cells of a given class size.
 void free(Address cell)
          Free a cell.
 int getHeaderSize()
          Calculate the header size required for the large object.
 Extent getSize(Address first)
          Return the size of the super page
static Address getSuperPage(Address cell)
          Return the superpage for a given cell.
protected abstract  int superPageHeaderSize()
          Return the size of the per-superpage header required by this system.
 
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, isLive, isMappedAddress, isMappedObject, isMovable, isMovable, isReachable, printUsageMB, printUsagePages, printVMMap, release, releaseAllChunks, releaseDiscontiguousChunks, requiredChunks, reservedPages, setZeroingApproach, skipConcurrentZeroing, traceObject, triggerConcurrentZeroing, visitSpaces
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PAGE_MASK

protected static final Word PAGE_MASK
Constructor Detail

BaseLargeObjectSpace

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

getHeaderSize

public final int getHeaderSize()
Calculate the header size required for the large object. Must be multiple of MIN_ALIGNMENT.


free

public final void free(Address cell)
Free a cell. If the cell is large (own superpage) then release the superpage, if not add to the super page's free list and if all cells on the superpage are free, then release the superpage.

Parameters:
cell - The address of the first byte of the cell to be freed

superPageHeaderSize

protected abstract int superPageHeaderSize()
Return the size of the per-superpage header required by this system. In this case it is just the underlying superpage header size.

Returns:
The size of the per-superpage header required by this system.

cellHeaderSize

protected abstract int cellHeaderSize()
Return the size of the per-cell header for cells of a given class size.

Returns:
The size of the per-cell header for cells of a given class size.

getSuperPage

public static Address getSuperPage(Address cell)
Return the superpage for a given cell. If the cell is a small cell then this is found by masking the cell address to find the containing page. Otherwise the first word of the cell contains the address of the page.

Parameters:
cell - The address of the first word of the cell (exclusive of any sub-class specific metadata).
Returns:
The address of the first word of the superpage containing cell.

getSize

public Extent getSize(Address first)
Return the size of the super page

Parameters:
first - the Address of the first word in the superpage
Returns:
the size in bytes