diff options
author | Martin Ritchie <ritchiem@apache.org> | 2006-10-20 12:02:09 +0000 |
---|---|---|
committer | Martin Ritchie <ritchiem@apache.org> | 2006-10-20 12:02:09 +0000 |
commit | ad94436b4b0c4433fc7b7813fe4acf450406a66d (patch) | |
tree | e2885a3543e4853738f4c5324edea9780416ce71 /java | |
parent | 99eff7255998614695fb956f5904eb7c6c56a385 (diff) | |
download | qpid-python-ad94436b4b0c4433fc7b7813fe4acf450406a66d.tar.gz |
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
Diffstat (limited to 'java')
-rw-r--r-- | java/common/src/org/apache/qpid/framing/ContentBody.java | 25 |
1 files changed, 22 insertions, 3 deletions
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; } } |