Interface MemoryManager<E extends Buffer>

All Superinterfaces:
MonitoringAware<MemoryProbe>
All Known Implementing Classes:
AbstractMemoryManager, ByteBufferManager, HeapMemoryManager, PooledMemoryManager

public interface MemoryManager<E extends Buffer> extends MonitoringAware<MemoryProbe>
MemoryManager, responsible for allocating and releasing memory, required during application runtime. MemoryManager implementations work with Grizzly Buffers.
Author:
Alexey Stashok
See Also:
  • Field Details

    • DEFAULT_MEMORY_MANAGER

      static final MemoryManager DEFAULT_MEMORY_MANAGER

      The default MemoryManager implementation used by all created builder instances.

      The default may be changed by one of two methods:

      • Setting the system property "org.glassfish.grizzly.DEFAULT_MEMORY_MANAGER" with the fully qualified name of the class that implements the MemoryManager interface. Note that this class must be public and have a public no-arg constructor.
      • Setting the system property "org.glassfish.grizzly.MEMORY_MANAGER_FACTORY" with the fully qualified name of the class that implements the DefaultMemoryManagerFactory interface. Note that this class must be public and have a public no-arg constructor.

  • Method Details

    • allocate

      E allocate(int size)
      Allocated Buffer of the required size.
      Parameters:
      size - Buffer size to be allocated.
      Returns:
      allocated Buffer.
    • allocateAtLeast

      E allocateAtLeast(int size)
      Allocated Buffer at least of the provided size. This could be useful for usecases like Socket.read(...), where we're not sure how many bytes are available, but want to read as much as possible.
      Parameters:
      size - the min Buffer size to be allocated.
      Returns:
      allocated Buffer.
    • reallocate

      E reallocate(E oldBuffer, int newSize)
      Reallocate Buffer to a required size. Implementation may choose the way, how reallocation could be done, either by allocating new Buffer of required size and copying old Buffer content there, or perform more complex logic related to memory pooling etc.
      Parameters:
      oldBuffer - old Buffer to be reallocated.
      newSize - new Buffer required size.
      Returns:
      reallocated Buffer.
    • release

      void release(E buffer)
      Release Buffer. Implementation may ignore releasing and let JVM Garbage collector to take care about the Buffer, or return Buffer to pool, in case of more complex MemoryManager implementation.
      Parameters:
      buffer - Buffer to be released.
    • willAllocateDirect

      boolean willAllocateDirect(int size)
      Return true if next allocate(int) or allocateAtLeast(int) call, made in the current thread for the given memory size, going to return a Buffer based on direct ByteBuffer, or false otherwise.
      Parameters:
      size -
      Returns: