From 17334a0a427458f0387f708825d23d756d36a2f8 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 15 Apr 2014 06:40:15 +0200 Subject: [PATCH] [#2390] Minimize memory usage of NioDatagramChannel Motivation: At the moment we create a HashMap that holds the MembershipKeys for multicast with every NioDatagramChannel even when most people not need it at al Modifications: Lazy create the HashMap when needed. Result: Less memory usage and less object creation --- .../netty/channel/socket/nio/NioDatagramChannel.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java b/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java index aa71a8b746..b3bb45281e 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java @@ -64,9 +64,8 @@ public final class NioDatagramChannel private static final SelectorProvider DEFAULT_SELECTOR_PROVIDER = SelectorProvider.provider(); private final DatagramChannelConfig config; - private final Map> memberships = - new HashMap>(); + private Map> memberships; private RecvByteBufAllocator.Handle allocHandle; private static DatagramChannel newSocket(SelectorProvider provider) { @@ -367,7 +366,12 @@ public final class NioDatagramChannel } synchronized (this) { - List keys = memberships.get(multicastAddress); + List keys = null; + if (memberships == null) { + memberships = new HashMap>(); + } else { + keys = memberships.get(multicastAddress); + } if (keys == null) { keys = new ArrayList(); memberships.put(multicastAddress, keys);