javolution.context
Class AllocatorContext

Object
  extended by Context
      extended by AllocatorContext
All Implemented Interfaces:
Serializable, XMLSerializable
Direct Known Subclasses:
HeapContext, ImmortalContext, PoolContext, StackContext

public abstract class AllocatorContext
extends Context

This class represents an allocator context; it defines the the allocation policy of the objects produced by ObjectFactory.

The default context used by new threads is HeapContext. ConcurrentContext threads inherits the allocator context from their parent thread (the one which entered the concurrent context).

Specializations may allocate from thread-local stacks (e.g.StackContext), shared pools (e.g. PoolContext), specific memory areas (e.g. ImmortalContext) or using any user defined policy such as aging pools (where objects sufficiently old are recycled), switchable spaces (objects from recycled when buffers are swapped), etc.

Version:
5.2, August 19, 2007
Author:
Jean-Marie Dautelle
See Also:
Serialized Form

Nested Class Summary
static class AllocatorContext.Reference<T>
           This class represents a reference allocated from the current AllocatorContext.
 
Field Summary
static Configurable<Class<? extends AllocatorContext>> DEFAULT
          Holds the default allocator context shared by all newly created threads (the default is a HeapContext instance).
 
Fields inherited from class Context
ROOT
 
Constructor Summary
protected AllocatorContext()
          Default constructor.
 
Method Summary
protected abstract  void deactivate()
          Deactivates the allocators belonging to this context for the current thread.
protected abstract  Allocator getAllocator(ObjectFactory factory)
          Returns the allocator for the specified factory in this context.
static AllocatorContext getCurrentAllocatorContext()
          Returns the current allocator context.
static AllocatorContext getDefault()
          Returns the default instance (DEFAULT implementation).
static
<T extends ValueType>
T
outerCopy(T value)
          Performs a copy of the specified value allocated outside of the current allocator context.
static void outerCopy(ValueType[] values)
          Performs a copy of the specified values outside of the current stack context (convenience method).
static void outerExecute(Runnable logic)
          Executes the specified logic outside of the current allocator context.
 
Methods inherited from class Context
enter, enter, enterAction, exit, exit, exitAction, getCurrentContext, getOuter, getOwner, setConcurrentContext, toString
 
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT

public static final Configurable<Class<? extends AllocatorContext>> DEFAULT
Holds the default allocator context shared by all newly created threads (the default is a HeapContext instance). The default allocator context is configurable. For example the following runs the javolution built-in tests with a PoolContext as default (javolution built-in tests loads their configuration from systems properties)
   > java -Djavolution.AllocatorContext.Default=javolution.context.PoolContext -jar javolution.jar time
 

Constructor Detail

AllocatorContext

protected AllocatorContext()
Default constructor.

Method Detail

getCurrentAllocatorContext

public static AllocatorContext getCurrentAllocatorContext()
Returns the current allocator context. If the current thread has not entered an allocator context (e.g. new thread) then getDefault() is returned.

Returns:
the current allocator context.

getDefault

public static AllocatorContext getDefault()
Returns the default instance (DEFAULT implementation).

Returns:
the default instance.

getAllocator

protected abstract Allocator getAllocator(ObjectFactory factory)
Returns the allocator for the specified factory in this context.

Parameters:
factory - the factory for which the allocator is returned.
Returns:
the allocator producing instances of the specified factory.

deactivate

protected abstract void deactivate()
Deactivates the allocators belonging to this context for the current thread. This method is typically called when an inner allocator context is entered by the current thread, when exiting an allocator context or when a concurrent executor has completed its task within this allocator context. Deactivated allocators have no user (null).


outerCopy

public static <T extends ValueType> T outerCopy(T value)
Performs a copy of the specified value allocated outside of the current allocator context.

Parameters:
value - the value to be copied.
Returns:
a copy allocated using the outer allocator.

outerCopy

public static void outerCopy(ValueType[] values)
Performs a copy of the specified values outside of the current stack context (convenience method). This method is equivalent to:
  AllocatorContext.outerExecute(new Runnable() {
      public void run() {
         for (int i = 0; i < values.length; i++) {
             values[i] = {ValueType) values[i].copy();
         }
     }
  });

Parameters:
values - the array whose elements are exported.

outerExecute

public static void outerExecute(Runnable logic)
Executes the specified logic outside of the current allocator context.

Parameters:
logic - the logic to be executed outside of the current stack context.


Copyright © 2005-2012 Javolution. All Rights Reserved.