J avolution v5.2 (J2SE 1.5+)

javolution.context
Class StackContext

java.lang.Object
  extended by javolution.context.Context
      extended by javolution.context.AllocatorContext
          extended by javolution.context.StackContext
All Implemented Interfaces:
java.io.Serializable, XMLSerializable

public abstract class StackContext
extends AllocatorContext

This class represents a stack allocator context; (using thread-local pools or RTSJ ScopedMemory).

Stacks allocations reduce heap memory allocation and often result in faster execution time for almost all objects but the smallest one.

Stack allocated objects should never be assigned to static members (see ImmortalContext). Also, methods entering/exiting stack contexts should ensure that stack allocated objects do not escape from their context scope. If necessary, stack objects can be exported using outerExecute(java.lang.Runnable) or outerCopy(T):

     public class LargeInteger implements ValueType, Realtime {
         public LargeInteger sqrt() {
             StackContext.enter(); 
             try { 
                 LargeInteger result = ZERO;
                 LargeInteger k = this.shiftRight(this.bitLength() / 2)); // First approximation.
                 while (true) { // Newton Iteration.
                     result = (k.plus(this.divide(k))).shiftRight(1);
                     if (result.equals(k)) return StackContext.outerCopy(result); // Exports result.
                     k = result;
                 }
             } finally { 
                 StackContext.exit(); 
             }
         }
     }

It should be noted that future versions of the JVM may provide some limited support for stack allocation through escape analysis. Users may always turn-off stack allocation to revert to standard heap allocation.

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

Nested Class Summary
 
Nested classes/interfaces inherited from class javolution.context.AllocatorContext
AllocatorContext.Reference<T>
 
Field Summary
static Configurable<java.lang.Class<? extends StackContext>> DEFAULT
          Holds the default implementation.
static Configurable<java.lang.Boolean> DISABLED
          Indicates if stack allocations are globally disabled.
 
Fields inherited from class javolution.context.Context
ROOT
 
Constructor Summary
StackContext()
           
 
Method Summary
static StackContext enter()
          Enters the DEFAULT stack context.
static StackContext exit()
          Exits the current stack context.
 boolean isDisabled()
          Indicates if this stack context is disabled.
static
<T extends ValueType>
T
outerCopy(T value)
          Performs a copy of the specified value allocated outside of the current stack context.
static void outerExecute(java.lang.Runnable logic)
          Executes the specified logic outside of the current stack context.
 void setDisabled(boolean isDisabled)
          Enables/disables this stack context.
 
Methods inherited from class javolution.context.AllocatorContext
deactivate, getAllocator, getCurrent, getDefault
 
Methods inherited from class javolution.context.Context
enter, enter, enterAction, exit, exitAction, getOuter, getOwner, setCurrent, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT

public static final Configurable<java.lang.Class<? extends StackContext>> DEFAULT
Holds the default implementation. This implementation uses thread-local pools. RTSJ alternative implementations could use ScopedMemory for their stack allocations.


DISABLED

public static final Configurable<java.lang.Boolean> DISABLED
Indicates if stack allocations are globally disabled.

Constructor Detail

StackContext

public StackContext()
Method Detail

enter

public static StackContext enter()
Enters the DEFAULT stack context.

Returns:
the statck context being entered.

exit

public static StackContext exit()
Exits the current stack context.

Returns:
the stack context being exited.
Throws:
java.lang.ClassCastException - if the context is not a stack context.

outerCopy

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

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

outerExecute

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

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

isDisabled

public final boolean isDisabled()
Indicates if this stack context is disabled. When disabled, allocation are performed using the outer AllocatorContext.


setDisabled

public final void setDisabled(boolean isDisabled)
Enables/disables this stack context.

Parameters:
isDisabled - true if disabled; false otherwise.

J avolution v5.2 (J2SE 1.5+)

Copyright © 2005 - 2007 Javolution.