Package org.glassfish.grizzly.memory
Class ByteBufferManager
- java.lang.Object
-
- org.glassfish.grizzly.memory.AbstractMemoryManager<ByteBufferWrapper>
-
- org.glassfish.grizzly.memory.ByteBufferManager
-
- All Implemented Interfaces:
ByteBufferAware
,MemoryManager<ByteBufferWrapper>
,ThreadLocalPoolProvider
,WrapperAware
,MonitoringAware<MemoryProbe>
public class ByteBufferManager extends AbstractMemoryManager<ByteBufferWrapper> implements WrapperAware, ByteBufferAware
The simple Buffer manager implementation, which works as wrapper aboveByteBuffer
s. It's possible to work either with direct or heapByteBuffer
s.- Author:
- Jean-Francois Arcand, Alexey Stashok
- See Also:
MemoryManager
,ByteBuffer
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
ByteBufferManager.SmallByteBufferWrapper
ByteBufferWrapper
implementation, which supports trimming.-
Nested classes/interfaces inherited from class org.glassfish.grizzly.memory.AbstractMemoryManager
AbstractMemoryManager.TrimAware
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_SMALL_BUFFER_SIZE
TODO: Documentprotected boolean
isDirect
Is direct ByteBuffer should be used?protected int
maxSmallBufferSize
-
Fields inherited from class org.glassfish.grizzly.memory.AbstractMemoryManager
DEFAULT_MAX_BUFFER_SIZE, maxBufferSize, monitoringConfig
-
Fields inherited from interface org.glassfish.grizzly.memory.MemoryManager
DEFAULT_MEMORY_MANAGER
-
-
Constructor Summary
Constructors Constructor Description ByteBufferManager()
ByteBufferManager(boolean isDirect)
ByteBufferManager(boolean isDirect, int maxBufferSize, int maxSmallBufferSize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ByteBufferWrapper
allocate(int size)
AllocatedBuffer
of the required size.ByteBufferWrapper
allocateAtLeast(int size)
AllocatedBuffer
at least of the provided size.ByteBuffer
allocateByteBuffer(int size)
AllocatesByteBuffer
of required size.protected ByteBuffer
allocateByteBuffer0(int size)
ByteBuffer
allocateByteBufferAtLeast(int size)
AllocatesByteBuffer
of required size.protected Object
createJmxManagementObject()
Create the Memory Manager JMX management object.protected ByteBufferManager.SmallByteBufferWrapper
createSmallBuffer()
ThreadLocalPool
createThreadLocalPool()
int
getMaxSmallBufferSize()
MonitoringConfig<MemoryProbe>
getMonitoringConfig()
Return the object associatedMonitoringConfig
.boolean
isDirect()
Returns true, if ByteBufferManager works with directByteBuffer
s, or false otherwise.ByteBufferWrapper
reallocate(ByteBufferWrapper oldBuffer, int newSize)
ReallocateBuffer
to a required size.ByteBuffer
reallocateByteBuffer(ByteBuffer oldByteBuffer, int newSize)
void
release(ByteBufferWrapper buffer)
Lets JVM Garbage collector to release buffer.void
releaseByteBuffer(ByteBuffer byteBuffer)
void
setDirect(boolean isDirect)
Set true, if ByteBufferManager works with directByteBuffer
s, or false otherwise.boolean
willAllocateDirect(int size)
Return true if nextMemoryManager.allocate(int)
orMemoryManager.allocateAtLeast(int)
call, made in the current thread for the given memory size, going to return aBuffer
based on directByteBuffer
, or false otherwise.ByteBufferWrapper
wrap(byte[] data)
ReturnsBuffer
, which wraps the byte array.ByteBufferWrapper
wrap(byte[] data, int offset, int length)
ReturnsBuffer
, which wraps the part of byte array with specific offset and length.ByteBufferWrapper
wrap(String s)
ByteBufferWrapper
wrap(String s, Charset charset)
ByteBufferWrapper
wrap(ByteBuffer byteBuffer)
ReturnsBuffer
, which wraps theByteBuffer
.-
Methods inherited from class org.glassfish.grizzly.memory.AbstractMemoryManager
allocateFromPool, getMaxBufferSize, getReadyThreadBufferSize, getThreadLocalPool
-
-
-
-
Field Detail
-
DEFAULT_SMALL_BUFFER_SIZE
public static final int DEFAULT_SMALL_BUFFER_SIZE
TODO: Document- See Also:
- Constant Field Values
-
isDirect
protected boolean isDirect
Is direct ByteBuffer should be used?
-
maxSmallBufferSize
protected final int maxSmallBufferSize
-
-
Method Detail
-
getMaxSmallBufferSize
public int getMaxSmallBufferSize()
-
allocate
public ByteBufferWrapper allocate(int size)
AllocatedBuffer
of the required size.- Specified by:
allocate
in interfaceMemoryManager<ByteBufferWrapper>
- Parameters:
size
-Buffer
size to be allocated.- Returns:
- allocated
Buffer
.
-
allocateAtLeast
public ByteBufferWrapper allocateAtLeast(int size)
AllocatedBuffer
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.- Specified by:
allocateAtLeast
in interfaceMemoryManager<ByteBufferWrapper>
- Parameters:
size
- the minBuffer
size to be allocated.- Returns:
- allocated
Buffer
.
-
reallocate
public ByteBufferWrapper reallocate(ByteBufferWrapper oldBuffer, int newSize)
ReallocateBuffer
to a required size. Implementation may choose the way, how reallocation could be done, either by allocating newBuffer
of required size and copying oldBuffer
content there, or perform more complex logic related to memory pooling etc.- Specified by:
reallocate
in interfaceMemoryManager<ByteBufferWrapper>
- Parameters:
oldBuffer
- oldBuffer
to be reallocated.newSize
- newBuffer
required size.- Returns:
- reallocated
Buffer
.
-
release
public void release(ByteBufferWrapper buffer)
Lets JVM Garbage collector to release buffer.- Specified by:
release
in interfaceMemoryManager<ByteBufferWrapper>
- Parameters:
buffer
-Buffer
to be released.
-
isDirect
public boolean isDirect()
Returns true, if ByteBufferManager works with directByteBuffer
s, or false otherwise.- Returns:
- true, if ByteBufferManager works with direct
ByteBuffer
s, or false otherwise.
-
setDirect
public void setDirect(boolean isDirect)
Set true, if ByteBufferManager works with directByteBuffer
s, or false otherwise.- Parameters:
isDirect
- true, if ByteBufferManager works with directByteBuffer
s, or false otherwise.
-
willAllocateDirect
public boolean willAllocateDirect(int size)
Return true if nextMemoryManager.allocate(int)
orMemoryManager.allocateAtLeast(int)
call, made in the current thread for the given memory size, going to return aBuffer
based on directByteBuffer
, or false otherwise.- Specified by:
willAllocateDirect
in interfaceMemoryManager<ByteBufferWrapper>
- Returns:
-
wrap
public ByteBufferWrapper wrap(byte[] data)
ReturnsBuffer
, which wraps the byte array.- Specified by:
wrap
in interfaceWrapperAware
- Parameters:
data
- byte array to wrap- Returns:
Buffer
wrapper on top of passed byte array.
-
wrap
public ByteBufferWrapper wrap(byte[] data, int offset, int length)
ReturnsBuffer
, which wraps the part of byte array with specific offset and length.- Specified by:
wrap
in interfaceWrapperAware
- Parameters:
data
- byte array to wrapoffset
- byte buffer offsetlength
- byte buffer length- Returns:
Buffer
wrapper on top of passed byte array.
-
wrap
public ByteBufferWrapper wrap(String s)
- Specified by:
wrap
in interfaceWrapperAware
- Parameters:
s
-String
- Returns:
Buffer
wrapper on top of passedString
.
-
wrap
public ByteBufferWrapper wrap(String s, Charset charset)
-
createThreadLocalPool
public ThreadLocalPool createThreadLocalPool()
- Specified by:
createThreadLocalPool
in interfaceThreadLocalPoolProvider
- Returns:
- a new
ThreadLocalPool
implementation. This method must return a newThreadLocalPool
instance per invocation.
-
wrap
public ByteBufferWrapper wrap(ByteBuffer byteBuffer)
ReturnsBuffer
, which wraps theByteBuffer
.- Specified by:
wrap
in interfaceWrapperAware
- Parameters:
byteBuffer
-ByteBuffer
to wrap- Returns:
Buffer
wrapper on top of passedByteBuffer
.
-
allocateByteBuffer
public ByteBuffer allocateByteBuffer(int size)
AllocatesByteBuffer
of required size.- Specified by:
allocateByteBuffer
in interfaceByteBufferAware
- Parameters:
size
-ByteBuffer
size.- Returns:
- allocated
ByteBuffer
.
-
allocateByteBufferAtLeast
public ByteBuffer allocateByteBufferAtLeast(int size)
AllocatesByteBuffer
of required size.- Specified by:
allocateByteBufferAtLeast
in interfaceByteBufferAware
- Parameters:
size
-ByteBuffer
size.- Returns:
- allocated
ByteBuffer
.
-
reallocateByteBuffer
public ByteBuffer reallocateByteBuffer(ByteBuffer oldByteBuffer, int newSize)
- Specified by:
reallocateByteBuffer
in interfaceByteBufferAware
-
releaseByteBuffer
public void releaseByteBuffer(ByteBuffer byteBuffer)
- Specified by:
releaseByteBuffer
in interfaceByteBufferAware
-
createSmallBuffer
protected ByteBufferManager.SmallByteBufferWrapper createSmallBuffer()
-
getMonitoringConfig
public MonitoringConfig<MemoryProbe> getMonitoringConfig()
Description copied from interface:MonitoringAware
Return the object associatedMonitoringConfig
.- Specified by:
getMonitoringConfig
in interfaceMonitoringAware<MemoryProbe>
- Returns:
- the object associated
MonitoringConfig
.
-
createJmxManagementObject
protected Object createJmxManagementObject()
Create the Memory Manager JMX management object.- Specified by:
createJmxManagementObject
in classAbstractMemoryManager<ByteBufferWrapper>
- Returns:
- the Memory Manager JMX management object.
-
allocateByteBuffer0
protected final ByteBuffer allocateByteBuffer0(int size)
-
-