From 891be30a28c6dc5a1edf1cb5a3690644cf4ff66e Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Mon, 27 Apr 2015 15:14:01 +0200 Subject: [PATCH] Remove memory copy when extract frame in LengthFieldBasedFrameDecoder Motivation: We are currently doing a memory cop to extract the frame in LengthFieldBasedFrameDecoder which can be eliminated. Modifications: Use buffer.slice(...).retain() to eliminate the memory copy. Result: Better performance. --- .../io/netty/handler/codec/LengthFieldBasedFrameDecoder.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/codec/src/main/java/io/netty/handler/codec/LengthFieldBasedFrameDecoder.java b/codec/src/main/java/io/netty/handler/codec/LengthFieldBasedFrameDecoder.java index 2aa95cba71..608ff27f52 100644 --- a/codec/src/main/java/io/netty/handler/codec/LengthFieldBasedFrameDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/LengthFieldBasedFrameDecoder.java @@ -491,9 +491,7 @@ public class LengthFieldBasedFrameDecoder extends ByteToMessageDecoder { * is overridden to avoid memory copy. */ protected ByteBuf extractFrame(ChannelHandlerContext ctx, ByteBuf buffer, int index, int length) { - ByteBuf frame = ctx.alloc().buffer(length); - frame.writeBytes(buffer, index, length); - return frame; + return buffer.slice(index, length).retain(); } private void fail(long frameLength) {