Package org.jboss.netty.handler.ssl
Class SslBufferPool
java.lang.Object
org.jboss.netty.handler.ssl.SslBufferPool
A
ByteBuffer
pool dedicated for SslHandler
performance improvement.
In most cases, you won't need to create a new pool instance because SslHandler
has a default pool
instance internally.
The reason why SslHandler
requires a buffer pool is because the current SSLEngine
implementation
always requires a 17KiB buffer for every 'wrap' and 'unwrap' operation. In most cases, the actual size of the
required buffer is much smaller than that, and therefore allocating a 17KiB buffer for every 'wrap' and 'unwrap'
operation wastes a lot of memory bandwidth, resulting in the application performance degradation.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final boolean
private static final int
private static final int
private final int
private final AtomicInteger
The number of buffers allocated so far.private final BlockingQueue
<ByteBuffer> private final ByteBuffer
-
Constructor Summary
ConstructorsConstructorDescriptionCreates a new buffer pool whose size is19267584
, which can hold1024
buffers.SslBufferPool
(boolean preallocate, boolean allocateDirect) Creates a new buffer pool whose size is19267584
, which can hold1024
buffers.SslBufferPool
(int maxPoolSize) Creates a new buffer pool.SslBufferPool
(int maxPoolSize, boolean preallocate, boolean allocateDirect) Creates a new buffer pool. -
Method Summary
Modifier and TypeMethodDescriptionAcquire a newByteBuffer
out of theSslBufferPool
private ByteBuffer
allocate
(int capacity) int
Returns the maximum size of this pool in byte unit.int
Returns the number of bytes which were allocated but have not been acquired yet.void
releaseBuffer
(ByteBuffer buffer) Release a previous acquiredByteBuffer
-
Field Details
-
MAX_PACKET_SIZE_ALIGNED
private static final int MAX_PACKET_SIZE_ALIGNED- See Also:
-
DEFAULT_POOL_SIZE
private static final int DEFAULT_POOL_SIZE- See Also:
-
preallocated
-
pool
-
maxBufferCount
private final int maxBufferCount -
allocateDirect
private final boolean allocateDirect -
numAllocations
The number of buffers allocated so far. Used only whenpreallocated
is null.
-
-
Constructor Details
-
SslBufferPool
public SslBufferPool()Creates a new buffer pool whose size is19267584
, which can hold1024
buffers. -
SslBufferPool
public SslBufferPool(boolean preallocate, boolean allocateDirect) Creates a new buffer pool whose size is19267584
, which can hold1024
buffers.- Parameters:
preallocate
-true
if and only if the buffers in this pool has to be pre-allocated at construction timeallocateDirect
-true
if and only if this pool has to allocate direct buffers.
-
SslBufferPool
public SslBufferPool(int maxPoolSize) Creates a new buffer pool.- Parameters:
maxPoolSize
- the maximum number of bytes that this pool can hold
-
SslBufferPool
public SslBufferPool(int maxPoolSize, boolean preallocate, boolean allocateDirect) Creates a new buffer pool.- Parameters:
maxPoolSize
- the maximum number of bytes that this pool can holdpreallocate
-true
if and only if the buffers in this pool has to be pre-allocated at construction timeallocateDirect
-true
if and only if this pool has to allocate direct buffers.
-
-
Method Details
-
getMaxPoolSize
public int getMaxPoolSize()Returns the maximum size of this pool in byte unit. The returned value can be somewhat different from what was specified in the constructor. -
getUnacquiredPoolSize
public int getUnacquiredPoolSize()Returns the number of bytes which were allocated but have not been acquired yet. You can estimate how optimal the specified maximum pool size is from this value. If it keeps returning0
, it means the pool is getting exhausted. If it keeps returns a unnecessarily big value, it means the pool is wasting the heap space. -
acquireBuffer
Acquire a newByteBuffer
out of theSslBufferPool
-
releaseBuffer
Release a previous acquiredByteBuffer
-
allocate
-