J avolution v5.4 (J2SE 1.6+)

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 AllocatorContext.outerExecute(java.lang.Runnable) or AllocatorContext.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(); 
             }
         }
     }

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.
 
Fields inherited from class javolution.context.Context
ROOT
 
Constructor Summary
StackContext()
           
 
Method Summary
static void enter()
          Enters the DEFAULT stack context.
static void enter(boolean condition)
          Enters a stack context only if the specified condition is verified.
static void exit()
          Exits the current stack context.
static void exit(boolean condition)
          Exits a stack context only if the specified condition is verified.
 
Methods inherited from class javolution.context.AllocatorContext
deactivate, getAllocator, getCurrent, getDefault, outerCopy, outerCopy, outerExecute
 
Methods inherited from class javolution.context.Context
enter, enter, enterAction, exit, 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. Users may also disable stack allocation by providing a class allocating on the heap.

Constructor Detail

StackContext

public StackContext()
Method Detail

enter

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


enter

public static void enter(boolean condition)
Enters a stack context only if the specified condition is verified.

Parameters:
condition - true to enter a stack context; false otherwise.

exit

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

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

exit

public static void exit(boolean condition)
Exits a stack context only if the specified condition is verified.

Parameters:
condition - true to exit a stack context; false otherwise.

J avolution v5.4 (J2SE 1.6+)

Copyright © 2005 - 2009 Javolution.