org.mmtk.utility.alloc
Class LargeObjectAllocator

java.lang.Object
  extended by org.mmtk.utility.alloc.Allocator
      extended by org.mmtk.utility.alloc.LargeObjectAllocator
All Implemented Interfaces:
Constants
Direct Known Subclasses:
LargeObjectLocal

public abstract class LargeObjectAllocator
extends Allocator
implements Constants

This abstract class implements core functionality for a generic large object allocator. The shared VMResource used by each instance is the point of global synchronization, and synchronization only occurs at the granularity of acquiring (and releasing) chunks of memory from the VMResource. Subclasses may require finer grained synchronization during a marking phase, for example.

This is a first cut implementation, with plenty of room for improvement...


Field Summary
protected  BaseLargeObjectSpace space
           
 
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
LargeObjectAllocator(BaseLargeObjectSpace space)
          Constructor
 
Method Summary
 Address alloc(int bytes, int align, int offset)
          Allocate space for an object
protected  Address allocSlowOnce(int bytes, int align, int offset)
          Allocate a large object.
protected  BaseLargeObjectSpace getSpace()
          Return the space this allocator is currently bound to.
 void show()
          Miscellaneous
 
Methods inherited from class org.mmtk.utility.alloc.Allocator
alignAllocation, alignAllocation, alignAllocationNoFill, allocSlow, allocSlowInline, determineCollectionAttempts, fillAlignmentGap, getMaximumAlignedSize, getMaximumAlignedSize
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

space

protected final BaseLargeObjectSpace space
Constructor Detail

LargeObjectAllocator

public LargeObjectAllocator(BaseLargeObjectSpace space)
Constructor

Parameters:
space - The space with which this large object allocator will be associated.
Method Detail

getSpace

protected final BaseLargeObjectSpace getSpace()
Description copied from class: Allocator
Return the space this allocator is currently bound to.

Specified by:
getSpace in class Allocator
Returns:
The Space.

alloc

public final Address alloc(int bytes,
                           int align,
                           int offset)
Allocate space for an object

Parameters:
bytes - The number of bytes allocated
align - The requested alignment.
offset - The alignment offset.
Returns:
The address of the first byte of the allocated cell Will not return zero.

allocSlowOnce

protected final Address allocSlowOnce(int bytes,
                                      int align,
                                      int offset)
Allocate a large object. Large objects are directly allocted and freed in page-grained units via the vm resource. This routine returned zeroed memory.

Specified by:
allocSlowOnce in class Allocator
Parameters:
bytes - The required size of this space in bytes.
offset - The alignment offset.
align - The requested alignment.
Returns:
The address of the start of the newly allocated region at least bytes bytes in size.

show

public void show()
Miscellaneous