Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Allocator
Class SimpleAllocator  view SimpleAllocator download SimpleAllocator.java

java.lang.Object
  extended byAllocator.HeapAllocator
      extended byAllocator.SimpleAllocator
All Implemented Interfaces:
Clazz.jq_ClassFileConstants

public class SimpleAllocator
extends HeapAllocator

SimpleAllocator

Version:
$Id: SimpleAllocator.java,v 1.30 2003/05/12 10:04:52 joewhaley Exp $

Nested Class Summary
 
Nested classes inherited from class Allocator.HeapAllocator
HeapAllocator.HeapPointer
 
Field Summary
static Clazz.jq_InstanceMethod _allocateArray
           
static Clazz.jq_InstanceMethod _allocateArrayAlign8
           
static Clazz.jq_InstanceMethod _allocateObject
           
static Clazz.jq_InstanceMethod _allocateObjectAlign8
           
static Clazz.jq_Class _class
           
static int BLOCK_SIZE
          Size of blocks allocated from the OS.
private  GC.GCBits gcBits
          GC information for the current block.
private  Memory.HeapAddress heapCurrent
          Pointers to the start, current, and end of the heap.
private  Memory.HeapAddress heapEnd
          Pointers to the start, current, and end of the heap.
private  Memory.HeapAddress heapFirst
          Pointers to the start, current, and end of the heap.
static int LARGE_THRESHOLD
          Threshold for direct OS allocation.
static int MAX_MEMORY
          Maximum memory, in bytes, to be allocated from the OS.
 
Fields inherited from class Allocator.HeapAllocator
_clsinitAndAllocateObject
 
Fields inherited from interface Clazz.jq_ClassFileConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_Long, CONSTANT_MethodRef, CONSTANT_NameAndType, CONSTANT_ResolvedClass, CONSTANT_ResolvedIFieldRef, CONSTANT_ResolvedIMethodRef, CONSTANT_ResolvedSFieldRef, CONSTANT_ResolvedSMethodRef, CONSTANT_String, CONSTANT_Utf8, CONSUME_STACK, ILLEGAL_OPCODE, ILLEGAL_TYPE, jbc_AALOAD, jbc_AASTORE, jbc_ACONST_NULL, jbc_ALOAD, jbc_ALOAD_0, jbc_ALOAD_1, jbc_ALOAD_2, jbc_ALOAD_3, jbc_ANEWARRAY, jbc_ARETURN, jbc_ARRAYLENGTH, jbc_ASTORE, jbc_ASTORE_0, jbc_ASTORE_1, jbc_ASTORE_2, jbc_ASTORE_3, jbc_ATHROW, jbc_BALOAD, jbc_BASTORE, jbc_BIPUSH, jbc_BREAKPOINT, jbc_CALOAD, jbc_CASTORE, jbc_CHECKCAST, jbc_D2F, jbc_D2I, jbc_D2L, jbc_DADD, jbc_DALOAD, jbc_DASTORE, jbc_DCMPG, jbc_DCMPL, jbc_DCONST_0, jbc_DCONST_1, jbc_DDIV, jbc_DLOAD, jbc_DLOAD_0, jbc_DLOAD_1, jbc_DLOAD_2, jbc_DLOAD_3, jbc_DMUL, jbc_DNEG, jbc_DREM, jbc_DRETURN, jbc_DSTORE, jbc_DSTORE_0, jbc_DSTORE_1, jbc_DSTORE_2, jbc_DSTORE_3, jbc_DSUB, jbc_DUP, jbc_DUP_X1, jbc_DUP_X2, jbc_DUP2, jbc_DUP2_X1, jbc_DUP2_X2, jbc_F2D, jbc_F2I, jbc_F2L, jbc_FADD, jbc_FALOAD, jbc_FASTORE, jbc_FCMPG, jbc_FCMPL, jbc_FCONST_0, jbc_FCONST_1, jbc_FCONST_2, jbc_FDIV, jbc_FLOAD, jbc_FLOAD_0, jbc_FLOAD_1, jbc_FLOAD_2, jbc_FLOAD_3, jbc_FMUL, jbc_FNEG, jbc_FREM, jbc_FRETURN, jbc_FSTORE, jbc_FSTORE_0, jbc_FSTORE_1, jbc_FSTORE_2, jbc_FSTORE_3, jbc_FSUB, jbc_GETFIELD, jbc_GETSTATIC, jbc_GOTO, jbc_GOTO_W, jbc_I2B, jbc_I2C, jbc_I2D, jbc_I2F, jbc_I2L, jbc_I2S, jbc_IADD, jbc_IALOAD, jbc_IAND, jbc_IASTORE, jbc_ICONST_0, jbc_ICONST_1, jbc_ICONST_2, jbc_ICONST_3, jbc_ICONST_4, jbc_ICONST_5, jbc_ICONST_M1, jbc_IDIV, jbc_IF_ACMPEQ, jbc_IF_ACMPNE, jbc_IF_ICMPEQ, jbc_IF_ICMPGE, jbc_IF_ICMPGT, jbc_IF_ICMPLE, jbc_IF_ICMPLT, jbc_IF_ICMPNE, jbc_IFEQ, jbc_IFGE, jbc_IFGT, jbc_IFLE, jbc_IFLT, jbc_IFNE, jbc_IFNONNULL, jbc_IFNULL, jbc_IINC, jbc_ILOAD, jbc_ILOAD_0, jbc_ILOAD_1, jbc_ILOAD_2, jbc_ILOAD_3, jbc_IMUL, jbc_INEG, jbc_INSTANCEOF, jbc_INT2BYTE, jbc_INT2CHAR, jbc_INT2SHORT, jbc_INVOKEINTERFACE, jbc_INVOKENONVIRTUAL, jbc_INVOKESPECIAL, jbc_INVOKESTATIC, jbc_INVOKEVIRTUAL, jbc_IOR, jbc_IREM, jbc_IRETURN, jbc_ISHL, jbc_ISHR, jbc_ISTORE, jbc_ISTORE_0, jbc_ISTORE_1, jbc_ISTORE_2, jbc_ISTORE_3, jbc_ISUB, jbc_IUSHR, jbc_IXOR, jbc_JSR, jbc_JSR_W, jbc_L2D, jbc_L2F, jbc_L2I, jbc_LADD, jbc_LALOAD, jbc_LAND, jbc_LASTORE, jbc_LCMP, jbc_LCONST_0, jbc_LCONST_1, jbc_LDC, jbc_LDC_W, jbc_LDC2_W, jbc_LDIV, jbc_LLOAD, jbc_LLOAD_0, jbc_LLOAD_1, jbc_LLOAD_2, jbc_LLOAD_3, jbc_LMUL, jbc_LNEG, jbc_LOOKUPSWITCH, jbc_LOR, jbc_LREM, jbc_LRETURN, jbc_LSHL, jbc_LSHR, jbc_LSTORE, jbc_LSTORE_0, jbc_LSTORE_1, jbc_LSTORE_2, jbc_LSTORE_3, jbc_LSUB, jbc_LUSHR, jbc_LXOR, jbc_MONITORENTER, jbc_MONITOREXIT, jbc_MULTIANEWARRAY, jbc_NEW, jbc_NEWARRAY, jbc_NOP, jbc_POP, jbc_POP2, jbc_PUTFIELD, jbc_PUTSTATIC, jbc_RET, jbc_RETURN, jbc_SALOAD, jbc_SASTORE, jbc_SIPUSH, jbc_SWAP, jbc_TABLESWITCH, jbc_WIDE, NO_OF_OPERANDS, OPCODE_NAMES, PRODUCE_STACK, RESERVED, STATE_CLSINITERROR, STATE_CLSINITIALIZED, STATE_CLSINITIALIZING, STATE_CLSINITRUNNING, STATE_COMPILED, STATE_COMPILING, STATE_LOADED, STATE_LOADERROR, STATE_LOADING1, STATE_LOADING2, STATE_LOADING3, STATE_PREPARED, STATE_PREPARING, STATE_SFINITIALIZED, STATE_SFINITIALIZING, STATE_UNLOADED, STATE_VERIFIED, STATE_VERIFYING, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_CLASSEND, TC_DOUBLE, TC_FLOAT, TC_INT, TC_LONG, TC_PARAM, TC_PARAMEND, TC_SHORT, TC_VOID, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE
 
Constructor Summary
SimpleAllocator()
           
 
Method Summary
 java.lang.Object allocateArray(int length, int size, java.lang.Object vtable)
          Allocate an array with the default alignment.
 java.lang.Object allocateArrayAlign8(int length, int size, java.lang.Object vtable)
          Allocate an array such that the elements are 8-byte aligned.
private  void allocateNewBlock()
          Allocates a new block of memory from the OS, sets the current block to point to it, makes the new block the current block, and allocates and installs the GC structures.
 java.lang.Object allocateObject(int size, java.lang.Object vtable)
          Allocate an object with the default alignment.
 java.lang.Object allocateObjectAlign8(int size, java.lang.Object vtable)
          Allocate an object such that the first field is 8-byte aligned.
 void collect()
          Initiate a garbage collection.
 int freeMemory()
          Returns an estimate of the amount of free memory available.
 void init()
          Perform initialization for this allocator.
private  void installGCBits()
          Allocates and installs the GC structures for the current block.
 void processPtrField(Memory.Address a)
          Process a reference to a heap object during garbage collection.
 int totalMemory()
          Returns an estimate of the total memory allocated (both used and unused).
 
Methods inherited from class Allocator.HeapAllocator
clone, clsinitAndAllocateObject, heapExhausted, outOfMemory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BLOCK_SIZE

public static final int BLOCK_SIZE
Size of blocks allocated from the OS.

See Also:
Constant Field Values

MAX_MEMORY

public static int MAX_MEMORY
Maximum memory, in bytes, to be allocated from the OS.


LARGE_THRESHOLD

public static final int LARGE_THRESHOLD
Threshold for direct OS allocation. When an array overflows the current block and is larger than this size, it is allocated directly from the OS.

See Also:
Constant Field Values

heapFirst

private Memory.HeapAddress heapFirst
Pointers to the start, current, and end of the heap.


heapCurrent

private Memory.HeapAddress heapCurrent
Pointers to the start, current, and end of the heap.


heapEnd

private Memory.HeapAddress heapEnd
Pointers to the start, current, and end of the heap.


gcBits

private GC.GCBits gcBits
GC information for the current block.


_class

public static final Clazz.jq_Class _class

_allocateObject

public static final Clazz.jq_InstanceMethod _allocateObject

_allocateObjectAlign8

public static final Clazz.jq_InstanceMethod _allocateObjectAlign8

_allocateArray

public static final Clazz.jq_InstanceMethod _allocateArray

_allocateArrayAlign8

public static final Clazz.jq_InstanceMethod _allocateArrayAlign8
Constructor Detail

SimpleAllocator

public SimpleAllocator()
Method Detail

init

public final void init()
                throws java.lang.OutOfMemoryError
Perform initialization for this allocator. This will be called before any other methods. This allocates an initial block of memory from the OS and sets up relevant pointers.

Specified by:
init in class HeapAllocator

allocateNewBlock

private void allocateNewBlock()
Allocates a new block of memory from the OS, sets the current block to point to it, makes the new block the current block, and allocates and installs the GC structures.


installGCBits

private void installGCBits()
Allocates and installs the GC structures for the current block.


freeMemory

public final int freeMemory()
Returns an estimate of the amount of free memory available.

Specified by:
freeMemory in class HeapAllocator

totalMemory

public final int totalMemory()
Returns an estimate of the total memory allocated (both used and unused).

Specified by:
totalMemory in class HeapAllocator

allocateObject

public final java.lang.Object allocateObject(int size,
                                             java.lang.Object vtable)
                                      throws java.lang.OutOfMemoryError
Allocate an object with the default alignment. If the object cannot be allocated due to lack of memory, throws OutOfMemoryError.

Specified by:
allocateObject in class HeapAllocator

allocateObjectAlign8

public final java.lang.Object allocateObjectAlign8(int size,
                                                   java.lang.Object vtable)
                                            throws java.lang.OutOfMemoryError
Allocate an object such that the first field is 8-byte aligned. If the object cannot be allocated due to lack of memory, throws OutOfMemoryError.

Specified by:
allocateObjectAlign8 in class HeapAllocator

allocateArray

public final java.lang.Object allocateArray(int length,
                                            int size,
                                            java.lang.Object vtable)
                                     throws java.lang.OutOfMemoryError,
                                            java.lang.NegativeArraySizeException
Allocate an array with the default alignment. If length is negative, throws NegativeArraySizeException. If the array cannot be allocated due to lack of memory, throws OutOfMemoryError.

Specified by:
allocateArray in class HeapAllocator

allocateArrayAlign8

public final java.lang.Object allocateArrayAlign8(int length,
                                                  int size,
                                                  java.lang.Object vtable)
                                           throws java.lang.OutOfMemoryError,
                                                  java.lang.NegativeArraySizeException
Allocate an array such that the elements are 8-byte aligned. If length is negative, throws NegativeArraySizeException. If the array cannot be allocated due to lack of memory, throws OutOfMemoryError.

Specified by:
allocateArrayAlign8 in class HeapAllocator

collect

public final void collect()
Description copied from class: HeapAllocator
Initiate a garbage collection.

Specified by:
collect in class HeapAllocator

processPtrField

public final void processPtrField(Memory.Address a)
Description copied from class: HeapAllocator
Process a reference to a heap object during garbage collection.

Specified by:
processPtrField in class HeapAllocator