Author: toad
Date: 2008-05-03 18:57:30 +0000 (Sat, 03 May 2008)
New Revision: 19712

Modified:
   trunk/freenet/src/freenet/node/MemoryChecker.java
Log:
Make sdiz's changes begin to make sense.
Less than 8MB from the maximum limit isn't that big a deal: it happens fairly 
frequently on any garbage collected system, especially with the -server VM.
So when we reach the threshold, do a GC, and then check again, and if we are 
still over the limit, trigger the OOM prevention code.

Modified: trunk/freenet/src/freenet/node/MemoryChecker.java
===================================================================
--- trunk/freenet/src/freenet/node/MemoryChecker.java   2008-05-03 18:00:56 UTC 
(rev 19711)
+++ trunk/freenet/src/freenet/node/MemoryChecker.java   2008-05-03 18:57:30 UTC 
(rev 19712)
@@ -49,8 +49,17 @@

                if (freeMemory < 8 * 1024 * 1024 // free memory < 8 MB
                        && (totalMemory == maxMemory || maxMemory == 
Long.MAX_VALUE)) { // we have allocated max memory
-                       Logger.error(this, "memory too low, trying to free 
some");
-                       OOMHandler.lowMemory();
+                       Logger.normal(this, "Reached threshold, checking for 
low memory ...");
+                       System.gc();
+                       System.runFinalization();
+                       totalMemory = r.totalMemory();
+                       freeMemory = r.freeMemory();
+                       maxMemory = r.maxMemory();
+                       if (freeMemory < 8 * 1024 * 1024 // free memory < 8 MB
+                               && (totalMemory == maxMemory || maxMemory == 
Long.MAX_VALUE)) { // we have allocated max memory
+                               Logger.error(this, "memory too low, trying to 
free some");
+                               OOMHandler.lowMemory();
+                       }
                }

                int sleeptime = aggressiveGCModificator;


Reply via email to