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 | 2ef1b37dc0b1ae3db9d9c0e7121307f167636203 (patch) | |
| tree | 10bed8a6158e8438caa231938dfe7d0eef437690 /qpid/java | |
| parent | 25f5d7167e6455b1440c23984b7ad2a2c5dadfa3 (diff) | |
| download | qpid-python-2ef1b37dc0b1ae3db9d9c0e7121307f167636203.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@466082 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
| -rw-r--r-- | qpid/java/common/src/org/apache/qpid/framing/ContentBody.java | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/qpid/java/common/src/org/apache/qpid/framing/ContentBody.java b/qpid/java/common/src/org/apache/qpid/framing/ContentBody.java index a345d1d225..d7b668534c 100644 --- a/qpid/java/common/src/org/apache/qpid/framing/ContentBody.java +++ b/qpid/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; } } |
