Overview | Package | Class | Tree | Deprecated | Index | Help
| J avolution v5.2 (J2SE 1.5+)
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## javolution.context
Class StackContext

    java.lang.Object
      javolution.context.Context
          javolution.context.AllocatorContext
              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 can 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` | `outerCopy(ValueType[] values)` Performs a copy of the specified values outside of the current stack context (convenience methode).
`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.

### outerCopy

    public static void outerCopy(ValueType[] values)

  Performs a copy of the specified values outside of the current stack context (convenience methode). This method is equivalent to:`

        StackContext.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(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.

Overview | Package | Class | Tree | Deprecated | Index | Help
| J avolution v5.2 (J2SE 1.5+)
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2005 - 2007 Javolution.