Allocation of objects.

There is a tension between fast allocation of objects and honoring various constraints the VM might place on the object.

These constraints include registering the objects for finalization, aligning the objects on multiple word boundaries, pinning objects for performance reasons, registering objects related to weak pointers and so forth.

We have tried to resolve this tension by overloading the size argument that is passed to the allocation routine. If the size of the argument has a high bit of 0, then the allocation routine will assume that no constraints exist on the allocation of this object and allocation can potentially be made very fast. If on the other hand the size is large then the routine will query the class data structure to determine what constraints are being made on the allocation of this object.

The gc_import.h interface will provide the following masks to allow the gc to quickly determine the constraints.

      CL_PROP_NON_REF_ARRAY_MASK 0x1000
      CL_PROP_ARRAY_MASK         0x2000
      CL_PROP_PINNED_MASK        0x4000
      CL_PROP_FINALIZABLE_MASK   0x8000
      CL_PROP_ALIGNMENT_MASK     0x0FFF
 

Genereated on Tue Mar 11 19:25:34 2008 by Doxygen.

(c) Copyright 2005, 2008 The Apache Software Foundation or its licensors, as applicable.