summaryrefslogtreecommitdiff
path: root/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
commitad94436b4b0c4433fc7b7813fe4acf450406a66d (patch)
treee2885a3543e4853738f4c5324edea9780416ce71 /java
parent99eff7255998614695fb956f5904eb7c6c56a385 (diff)
downloadqpid-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.java25
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;
}
}