From df7b3dd861fbb1e3054b6351ffac77361335dee9 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Tue, 29 Jun 2010 02:30:40 +0000
Subject: [PATCH]     * Scale prng.buffers based on max memory, reduce default
 from 16 to 9

---
 router/java/src/net/i2p/router/RouterContext.java | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/router/java/src/net/i2p/router/RouterContext.java b/router/java/src/net/i2p/router/RouterContext.java
index b4fa753812..3d5ed609ed 100644
--- a/router/java/src/net/i2p/router/RouterContext.java
+++ b/router/java/src/net/i2p/router/RouterContext.java
@@ -92,8 +92,16 @@ public class RouterContext extends I2PAppContext {
             envProps = new Properties();
         if (envProps.getProperty("time.disabled") == null)
             envProps.setProperty("time.disabled", "false");
-        if (envProps.getProperty("prng.buffers") == null)
-            envProps.setProperty("prng.buffers", "16");
+        if (envProps.getProperty("prng.buffers") == null) {
+            // How many of these 256 KB buffers do we need?
+            // One clue: prng.bufferFillTime is ~10ms on my system,
+            // and prng.bufferFillTime event count is ~30 per minute,
+            // or about 2 seconds per buffer - so about 200x faster
+            // to fill than to drain - so we don't need too many
+            long maxMemory = Runtime.getRuntime().maxMemory();
+            long buffs = Math.min(16, Math.max(2, maxMemory / (14 * 1024 * 1024)));
+            envProps.setProperty("prng.buffers", "" + buffs);
+        }
         return envProps;
     }
 
-- 
GitLab