org.mmtk.utility.alloc
Class SegregatedFreeList<S extends SegregatedFreeListSpace>

java.lang.Object
  extended by org.mmtk.utility.alloc.Allocator
      extended by org.mmtk.utility.alloc.SegregatedFreeList<S>
All Implemented Interfaces:
Constants
Direct Known Subclasses:
SegregatedFreeListLocal

public abstract class SegregatedFreeList<S extends SegregatedFreeListSpace>
extends Allocator
implements Constants

This abstract class implements the fast past for a segregated free list.


Field Summary
protected  AddressArray freeList
          The current free lists for the size classes
protected  S space
          The 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
SegregatedFreeList(S space)
          Constructor
 
Method Summary
 Address alloc(int bytes, int align, int offset)
          Allocate bytes contiguous bytes of zeroed memory.
private  int getSizeClass(int bytes)
          Get the size class for a given number of bytes.
protected  S getSpace()
          Return the space this allocator is currently bound to.
private  int sizeClassCount()
          The number of distinct size classes.
 
Methods inherited from class org.mmtk.utility.alloc.Allocator
alignAllocation, alignAllocation, alignAllocationNoFill, allocSlow, allocSlowInline, allocSlowOnce, 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 S extends SegregatedFreeListSpace space
The space


freeList

protected final AddressArray freeList
The current free lists for the size classes

Constructor Detail

SegregatedFreeList

public SegregatedFreeList(S space)
Constructor

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

getSpace

protected final S 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 bytes contiguous bytes of zeroed memory.

This code implements the fast path, and on failure delegates to the slow path.

Parameters:
bytes - The size of the object to occupy this space, in bytes.
align - The requested alignment.
offset - The alignment offset.
Returns:
The address of the first word or zero on failure

sizeClassCount

private int sizeClassCount()
The number of distinct size classes.

NOTE: For optimal performance this call must be implemented in a way it can be inlined and optimized within the allocation sequence.


getSizeClass

private int getSizeClass(int bytes)
Get the size class for a given number of bytes.

NOTE: For optimal performance this call must be implemented in a way it can be inlined and optimized within the allocation sequence.

Parameters:
bytes - The number of bytes required to accommodate the object
Returns:
The size class capable of accommodating the allocation request.