summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2006-10-20 12:02:09 +0000
committerMartin Ritchie <ritchiem@apache.org>2006-10-20 12:02:09 +0000
commit2ef1b37dc0b1ae3db9d9c0e7121307f167636203 (patch)
tree10bed8a6158e8438caa231938dfe7d0eef437690 /qpid/java
parent25f5d7167e6455b1440c23984b7ad2a2c5dadfa3 (diff)
downloadqpid-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.java25
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;
}
}