diff options
author | Robert Gemmell <robbie@apache.org> | 2011-02-17 16:16:31 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2011-02-17 16:16:31 +0000 |
commit | a3b787e95bd72e1d85ffec209b76280d0a88c54c (patch) | |
tree | c1f37b65ba827a032fa0dda37cdca43033bf1471 | |
parent | 6d30196fb80357e4db8487db7bf6971cce73966d (diff) | |
download | qpid-python-a3b787e95bd72e1d85ffec209b76280d0a88c54c.tar.gz |
QPID-3028: make assembler and disassembler use a static ThreadLocal for its BBEncoder and BBDecoder, release buffer from BBDecoder when complete
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1071674 13f79535-47bb-0310-9956-ffa450edef68
3 files changed, 12 insertions, 7 deletions
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java index 6f7a2fa3b2..10f67e1cd6 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java @@ -41,6 +41,11 @@ public final class BBDecoder extends AbstractDecoder this.in.order(ByteOrder.BIG_ENDIAN); } + public void releaseBuffer() + { + in = null; + } + protected byte doGet() { return in.get(); diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java index 357caa26e1..b3c419959c 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java @@ -28,7 +28,6 @@ import java.util.Map; import java.nio.ByteBuffer; import org.apache.qpid.transport.codec.BBDecoder; -import org.apache.qpid.transport.codec.Decoder; import org.apache.qpid.transport.Header; import org.apache.qpid.transport.Method; @@ -36,7 +35,6 @@ import org.apache.qpid.transport.ProtocolError; import org.apache.qpid.transport.ProtocolEvent; import org.apache.qpid.transport.ProtocolHeader; import org.apache.qpid.transport.Receiver; -import org.apache.qpid.transport.SegmentType; import org.apache.qpid.transport.Struct; @@ -51,7 +49,7 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate private final Receiver<ProtocolEvent> receiver; private final Map<Integer,List<Frame>> segments; private final Method[] incomplete; - private final ThreadLocal<BBDecoder> decoder = new ThreadLocal<BBDecoder>() + private static final ThreadLocal<BBDecoder> _decoder = new ThreadLocal<BBDecoder>() { public BBDecoder initialValue() { @@ -169,7 +167,7 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate private void assemble(Frame frame, ByteBuffer segment) { - BBDecoder dec = decoder.get(); + BBDecoder dec = _decoder.get(); dec.init(segment); int channel = frame.getChannel(); @@ -201,7 +199,7 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate break; case HEADER: command = incomplete[channel]; - List<Struct> structs = new ArrayList(2); + List<Struct> structs = new ArrayList<Struct>(2); while (dec.hasRemaining()) { structs.add(dec.readStruct32()); @@ -222,6 +220,8 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate default: throw new IllegalStateException("unknown frame type: " + frame.getType()); } + + dec.releaseBuffer(); } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java index bf439299b9..341264c347 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java @@ -54,7 +54,7 @@ public final class Disassembler implements Sender<ProtocolEvent>, private final int maxPayload; private final ByteBuffer header; private final Object sendlock = new Object(); - private final ThreadLocal<BBEncoder> encoder = new ThreadLocal<BBEncoder>() + private final static ThreadLocal<BBEncoder> _encoder = new ThreadLocal<BBEncoder>() { public BBEncoder initialValue() { @@ -183,7 +183,7 @@ public final class Disassembler implements Sender<ProtocolEvent>, private void method(Method method, SegmentType type) { - BBEncoder enc = encoder.get(); + BBEncoder enc = _encoder.get(); enc.init(); enc.writeUint16(method.getEncodedType()); if (type == SegmentType.COMMAND) |