From 95cf6a4a712bf8339af0fb2571748db58ba4ae11 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 31 Jul 2012 20:31:02 +0200 Subject: [PATCH] Use SocketReceiveBufferAllocator to allocate the ByteBuffer which is used to read from the DatagramChannel. See #483 --- .../netty/channel/socket/nio/NioDatagramWorker.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java index 4fb3817ad6..848db1466f 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java @@ -41,6 +41,8 @@ import org.jboss.netty.channel.ReceiveBufferSizePredictor; */ public class NioDatagramWorker extends AbstractNioWorker { + private final SocketReceiveBufferAllocator bufferAllocator = new SocketReceiveBufferAllocator(); + /** * Sole constructor. * @@ -67,13 +69,9 @@ public class NioDatagramWorker extends AbstractNioWorker { channel.getConfig().getReceiveBufferSizePredictor(); final ChannelBufferFactory bufferFactory = channel.getConfig().getBufferFactory(); final DatagramChannel nioChannel = (DatagramChannel) key.channel(); + final int predictedRecvBufSize = predictor.nextReceiveBufferSize(); - // Allocating a non-direct buffer with a max udp packge size. - // Would using a direct buffer be more efficient or would this negatively - // effect performance, as direct buffer allocation has a higher upfront cost - // where as a ByteBuffer is heap allocated. - final ByteBuffer byteBuffer = ByteBuffer.allocate( - predictor.nextReceiveBufferSize()).order(bufferFactory.getDefaultOrder()); + final ByteBuffer byteBuffer = bufferAllocator.get(predictedRecvBufSize).order(bufferFactory.getDefaultOrder()); boolean failure = true; SocketAddress remoteAddress = null;