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;