io.undertow.util

## Class ReferenceCountedPooled

- java.lang.Object
- - io.undertow.util.ReferenceCountedPooled

All Implemented Interfaces:
  PooledByteBuffer, Closeable, AutoCloseable

    public class ReferenceCountedPooled
    extends Object
    implements PooledByteBuffer

A reference counted pooled implementation, that basically consists of a main buffer, that can be sliced off into smaller buffers, and the underlying buffer will not be freed until all the slices and the main buffer itself have also been freed. This also supports the notion of un-freeing the main buffer. Basically this allows the buffer be re-used, so if only a small slice of the buffer was used for read operations the main buffer can potentially be re-used. This prevents buffer exhaustion attacks where content is sent in many small packets, and you end up allocating a large number of buffers to hold a small amount of data.

Author:
  Stuart Douglas

### Nested Class Summary

Nested Classes
`static interface` `ReferenceCountedPooled.FreeNotifier`

### Constructor Summary

Constructors
Constructor and Description
`ReferenceCountedPooled(PooledByteBuffer underlying, int referenceCount)`
`ReferenceCountedPooled(PooledByteBuffer underlying, int referenceCount, ReferenceCountedPooled.FreeNotifier freeNotifier)`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `close()`
`PooledByteBuffer` `createView()`
`PooledByteBuffer` `createView(int viewSize)`
`ByteBuffer` `getBuffer()`
`void` `increaseReferenceCount()`
`boolean` `isFreed()`
`boolean` `isOpen()`
`String` `toString()`
`boolean` `tryUnfree()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### ReferenceCountedPooled

    public ReferenceCountedPooled(PooledByteBuffer underlying,
                                  int referenceCount)

#### ReferenceCountedPooled

    public ReferenceCountedPooled(PooledByteBuffer underlying,
                                  int referenceCount,
                                  ReferenceCountedPooled.FreeNotifier freeNotifier)

### Method Detail

#### close

    public void close()

Specified by:
  `close` in interface `PooledByteBuffer`
Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`

#### isOpen

    public boolean isOpen()

Specified by:
  `isOpen` in interface `PooledByteBuffer`

#### isFreed

    public boolean isFreed()

#### tryUnfree

    public boolean tryUnfree()

#### getBuffer

    public ByteBuffer getBuffer()
                         throws IllegalStateException

Specified by:
  `getBuffer` in interface `PooledByteBuffer`
Throws:
  `IllegalStateException`

#### createView

    public PooledByteBuffer createView(int viewSize)

#### createView

    public PooledByteBuffer createView()

#### increaseReferenceCount

    public void increaseReferenceCount()

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`