Class ArenaMemoryAllocator
- java.lang.Object
-
- org.apache.druid.frame.allocation.ArenaMemoryAllocator
-
- All Implemented Interfaces:
MemoryAllocator
public class ArenaMemoryAllocator extends Object implements MemoryAllocator
Allocator that uses a reusableWritableMemory
arena. The allocator maintains a high watermark that is reset to zero when all outstanding allocations have been freed.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Optional<ResourceHolder<org.apache.datasketches.memory.WritableMemory>>
allocate(long size)
Allocates a block of memory of capacity {@param size}.long
available()
Returns the number of bytes available for allocations.long
capacity()
Returns the number of bytes managed by this allocator.static ArenaMemoryAllocator
create(ByteBuffer buffer)
Creates an allocator based on a specificByteBuffer
.static ArenaMemoryAllocator
createOnHeap(int capacity)
Creates an allocator of a specific size using an on-heapByteBuffer
.
-
-
-
Method Detail
-
create
public static ArenaMemoryAllocator create(ByteBuffer buffer)
Creates an allocator based on a specificByteBuffer
. The buffer is never freed, so to ensure proper cleanup when the allocator is discarded, this buffer must be on-heap (so it can be garbage collected) rather than off-heap.
-
createOnHeap
public static ArenaMemoryAllocator createOnHeap(int capacity)
Creates an allocator of a specific size using an on-heapByteBuffer
.
-
allocate
public Optional<ResourceHolder<org.apache.datasketches.memory.WritableMemory>> allocate(long size)
Description copied from interface:MemoryAllocator
Allocates a block of memory of capacity {@param size}. Returns empty if no more memory is available. The memory can be freed by closing the returnedResourceHolder
. The returned WritableMemory object will use little-endian byte order.- Specified by:
allocate
in interfaceMemoryAllocator
-
available
public long available()
Description copied from interface:MemoryAllocator
Returns the number of bytes available for allocations. May returnLong.MAX_VALUE
if there is no inherent limit. This generally does not mean you can actually allocate 9 exabytes.- Specified by:
available
in interfaceMemoryAllocator
-
capacity
public long capacity()
Description copied from interface:MemoryAllocator
Returns the number of bytes managed by this allocator. When no memory has been allocated yet, this is identical toMemoryAllocator.available()
. May returnLong.MAX_VALUE
if there is no inherent limit. This generally does not mean you can actually allocate 9 exabytes.- Specified by:
capacity
in interfaceMemoryAllocator
-
-