From 615885e889c92306f16b963fc4f88d1a447debf4 Mon Sep 17 00:00:00 2001 From: Enrico Olivelli Date: Thu, 6 Sep 2018 20:08:08 +0200 Subject: [PATCH] Add ByteBufferFactory#releaseByteBuffer (#4914) This adds the ability to dispose unused buffers or to return them to an object pool --- .../google/flatbuffers/FlatBufferBuilder.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/java/com/google/flatbuffers/FlatBufferBuilder.java b/java/com/google/flatbuffers/FlatBufferBuilder.java index 44f107aea..c34ae3f8a 100644 --- a/java/com/google/flatbuffers/FlatBufferBuilder.java +++ b/java/com/google/flatbuffers/FlatBufferBuilder.java @@ -152,6 +152,18 @@ public class FlatBufferBuilder { * @return Returns the new `ByteBuffer` that was allocated. */ ByteBuffer newByteBuffer(int capacity); + + /** + * Release a ByteBuffer. Current {@link FlatBufferBuilder} + * released any reference to it, so it is safe to dispose the buffer + * or return it to a pool. + * It is not guaranteed that the buffer has been created + * with {@link #newByteBuffer(int) }. + * + * @param bb the buffer to release + */ + default void releaseByteBuffer(ByteBuffer bb) { + } } /** @@ -241,7 +253,11 @@ public class FlatBufferBuilder { // Reallocate the buffer if needed. while (space < align_size + size + additional_bytes) { int old_buf_size = bb.capacity(); - bb = growByteBuffer(bb, bb_factory); + ByteBuffer old = bb; + bb = growByteBuffer(old, bb_factory); + if (old != bb) { + bb_factory.releaseByteBuffer(old); + } space += bb.capacity() - old_buf_size; } pad(align_size);