@Override public final boolean tryDispose() { if (allowBufferDispose) { dispose(); return true; } return false; }
/** * Create a new {@link HeapBuffer} based on the current heap. * * @param offs relative offset, the absolute value will calculated as (this.offset + offs) * @param capacity * @return */ protected HeapBuffer createHeapBuffer(final int offs, final int capacity) { onShareHeap(); return new HeapBuffer( heap, offs + offset, capacity); }
@Override public HeapBuffer duplicate() { checkDispose(); final HeapBuffer duplicate = createHeapBuffer(0, cap); duplicate.position(pos); duplicate.limit(lim); return duplicate; }
@Override public void trim() { checkDispose(); flip(); }
@Override public HeapBuffer slice(final int position, final int limit) { checkDispose(); return createHeapBuffer(position, limit - position); }
static void doDebug(HeapBuffer heapBuffer) { heapBuffer.clear(); while(heapBuffer.hasRemaining()) { heapBuffer.put((byte) 0xFF); } heapBuffer.flip(); heapBuffer.disposeStackTrace = new Exception("HeapBuffer was disposed from: "); } }
protected final void releaseHeapBuffer(final HeapBuffer heapBuffer) { final ThreadLocalPool<HeapBuffer> memoryPool = getHeapBufferThreadLocalPool(); if (memoryPool != null) { if (memoryPool.release(heapBuffer.clear())) { ProbeNotifier.notifyBufferReleasedToPool(monitoringConfig, heapBuffer.capacity()); } } }
@Override public HeapBuffer asReadOnlyBuffer() { checkDispose(); onShareHeap(); final HeapBuffer b = new ReadOnlyHeapBuffer(heap, offset, cap); b.pos = pos; b.lim = lim; return b; }
@Override public HeapBuffer get(final byte[] dst) { return get(dst, 0, dst.length); }
private HeapBuffer asReadOnlyBuffer(final int offset, final int cap) { checkDispose(); onShareHeap(); final HeapBuffer b = new ReadOnlyHeapBuffer(heap, offset, cap) { @Override public void dispose() { super.dispose(); PoolHeapBuffer.this.dispose0(); } @Override protected void onShareHeap() { PoolHeapBuffer.this.onShareHeap(); } @Override protected HeapBuffer createHeapBuffer(final int offset, final int capacity) { return PoolHeapBuffer.this.asReadOnlyBuffer(offset, capacity); } }; b.allowBufferDispose(true); return b; }
@Override protected void onShareHeap() { super.onShareHeap(); shareCount.incrementAndGet(); } } // END PoolBuffer
public static HeapBuffer wrap(byte[] heap, int off, int len) { return new HeapBuffer(heap, off, len); }
static void doDebug(HeapBuffer heapBuffer) { heapBuffer.clear(); while(heapBuffer.hasRemaining()) { heapBuffer.put((byte) 0xFF); } heapBuffer.flip(); heapBuffer.disposeStackTrace = new Exception("HeapBuffer was disposed from: "); } }
protected final void releaseHeapBuffer(final HeapBuffer heapBuffer) { final ThreadLocalPool<HeapBuffer> memoryPool = getHeapBufferThreadLocalPool(); if (memoryPool != null) { if (memoryPool.release(heapBuffer.clear())) { ProbeNotifier.notifyBufferReleasedToPool(monitoringConfig, heapBuffer.capacity()); } } }
@Override public HeapBuffer asReadOnlyBuffer() { checkDispose(); onShareHeap(); final HeapBuffer b = new ReadOnlyHeapBuffer(heap, offset, cap); b.pos = pos; b.lim = lim; return b; }
@Override public void trim() { checkDispose(); flip(); }
@Override public HeapBuffer slice(final int position, final int limit) { checkDispose(); return createHeapBuffer(position, limit - position); }
@Override public HeapBuffer get(final byte[] dst) { return get(dst, 0, dst.length); }
private HeapBuffer asReadOnlyBuffer(final int offset, final int cap) { checkDispose(); onShareHeap(); final HeapBuffer b = new ReadOnlyHeapBuffer(heap, offset, cap) { @Override public void dispose() { super.dispose(); PoolHeapBuffer.this.dispose0(); } @Override protected void onShareHeap() { PoolHeapBuffer.this.onShareHeap(); } @Override protected HeapBuffer createHeapBuffer(final int offset, final int capacity) { return PoolHeapBuffer.this.asReadOnlyBuffer(offset, capacity); } }; b.allowBufferDispose(true); return b; }
@Override protected void onShareHeap() { super.onShareHeap(); shareCount.incrementAndGet(); } } // END PoolBuffer