From ad94436b4b0c4433fc7b7813fe4acf450406a66d Mon Sep 17 00:00:00 2001 From: Martin Ritchie Date: Fri, 20 Oct 2006 12:02:09 +0000 Subject: QPID-48 Addition to be used from DeliveryManager.java to reduce the size of the ByteBuffer when queuing messages to reduce overall memory footprint. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@466082 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/org/apache/qpid/framing/ContentBody.java | 25 +++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'java/common/src') diff --git a/java/common/src/org/apache/qpid/framing/ContentBody.java b/java/common/src/org/apache/qpid/framing/ContentBody.java index a345d1d225..d7b668534c 100644 --- a/java/common/src/org/apache/qpid/framing/ContentBody.java +++ b/java/common/src/org/apache/qpid/framing/ContentBody.java @@ -32,7 +32,7 @@ public class ContentBody extends AMQBody public int getSize() { - return (payload == null?0:payload.limit()); + return (payload == null ? 0 : payload.limit()); } public void writePayload(ByteBuffer buffer) @@ -49,8 +49,27 @@ public class ContentBody extends AMQBody if (size > 0) { payload = buffer.slice(); - payload.limit((int)size); - buffer.skip((int)size); + payload.limit((int) size); + buffer.skip((int) size); + } + + } + + public void reduceBufferToFit() + { + if (payload != null && (payload.remaining() < payload.capacity() / 2)) + { + int size = payload.limit(); + ByteBuffer newPayload = ByteBuffer.allocate(size); + + newPayload.put(payload); + newPayload.position(0); + newPayload.limit(size); + + //reduce reference count on payload + payload.release(); + + payload = newPayload; } } -- cgit v1.2.1