diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java index 2a0824bf7..42e76440c 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java @@ -73,7 +73,6 @@ class EventPumper implements Runnable { } } - private static final TryCache _bufferCache = new TryCache<>(new BufferFactory(), MAX_CACHE_SIZE); /** * every few seconds, iterate across all ntcp connections just to make sure @@ -105,6 +104,8 @@ class EventPumper implements Runnable { long maxMemory = SystemVersion.getMaxMemory(); MIN_BUFS = (int) Math.max(MIN_MINB, Math.min(MAX_MINB, 1 + (maxMemory / (16*1024*1024)))); } + + private static final TryCache _bufferCache = new TryCache<>(new BufferFactory(), MIN_BUFS); public EventPumper(RouterContext ctx, NTCPTransport transport) { _context = ctx; diff --git a/router/java/src/net/i2p/router/transport/udp/UDPPacket.java b/router/java/src/net/i2p/router/transport/udp/UDPPacket.java index a88020ced..ca7380532 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPPacket.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPPacket.java @@ -57,11 +57,14 @@ class UDPPacket implements CDQEntry { private static final TryCache _packetCache; private static final TryCache.ObjectFactory _packetFactory; private static final boolean CACHE = true; + private static final int MIN_CACHE_SIZE = 64; private static final int MAX_CACHE_SIZE = 256; static { if (CACHE) { + long maxMemory = SystemVersion.getMaxMemory(); + int csize = (int) Math.max(MIN_CACHE_SIZE, Math.min(MAX_CACHE_SIZE, maxMemory / (1024*1024))); _packetFactory = new PacketFactory(); - _packetCache = new TryCache<>(_packetFactory, MAX_CACHE_SIZE); + _packetCache = new TryCache<>(_packetFactory, csize); } else { _packetCache = null; _packetFactory = null;