Author: nextgens
Date: 2006-07-13 08:26:47 +0000 (Thu, 13 Jul 2006)
New Revision: 9589

Modified:
   trunk/freenet/src/freenet/node/MemoryChecker.java
   trunk/freenet/src/freenet/node/Node.java
Log:
Implements node.aggressiveGC, see 
http://archives.freenetproject.org/thread/20060713.062548.1e298987.en.html

DO NOT USE UNLESS YOU KNOW WHAT YOU ARE DOING!
It's not documented : if you want to know what the value is referring to, RTFS 
:)
http://emu.freenetproject.org/cgi-bin/viewcvs.cgi/trunk/freenet/src/freenet/node/MemoryChecker.java?rev=8876&view=markup

It disables periodicaly called finalizer... but not the "finalize on 
completion" of buckets

Modified: trunk/freenet/src/freenet/node/MemoryChecker.java
===================================================================
--- trunk/freenet/src/freenet/node/MemoryChecker.java   2006-07-13 00:23:28 UTC 
(rev 9588)
+++ trunk/freenet/src/freenet/node/MemoryChecker.java   2006-07-13 08:26:47 UTC 
(rev 9589)
@@ -7,16 +7,20 @@
        public void run() {
                Runtime r = Runtime.getRuntime();
                while(true) {
+                       int sleeptime = Node.aggressiveGCModificator;
+                       if(sleeptime <= 0)
+                               sleeptime = 250;
+                       
                        for(int i=0;i<120;i++) {
                                try {
-                                       Thread.sleep(250);
+                                       Thread.sleep(sleeptime);
                                } catch (InterruptedException e) {
                                        // Ignore
                                }
                                Logger.minor(this, "Memory in use: 
"+(r.totalMemory()-r.freeMemory()));
                        }
                        try {
-                               Thread.sleep(250);
+                               Thread.sleep(sleeptime);
                        } catch (InterruptedException e) {
                                // Ignore
                        }
@@ -27,10 +31,12 @@
                        // memory usage *more predictable*. This will make
                        // tracking down the sort of nasty unpredictable OOMs
                        // we are getting much easier. 
-                       Logger.minor(this, "Memory in use before GC: 
"+(r.totalMemory()-r.freeMemory()));
-                       System.gc();
-                       System.runFinalization();
-                       Logger.minor(this, "Memory in use after GC: 
"+(r.totalMemory()-r.freeMemory()));
+                       if(Node.aggressiveGCModificator > 0){
+                               Logger.minor(this, "Memory in use before GC: 
"+(r.totalMemory()-r.freeMemory()));
+                               System.gc();
+                               System.runFinalization();
+                               Logger.minor(this, "Memory in use after GC: 
"+(r.totalMemory()-r.freeMemory()));
+                       }
                }
        }
 }
\ No newline at end of file

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-07-13 00:23:28 UTC (rev 
9588)
+++ trunk/freenet/src/freenet/node/Node.java    2006-07-13 08:26:47 UTC (rev 
9589)
@@ -416,6 +416,8 @@
        /** Log config handler */
        public static LoggingConfigHandler logConfigHandler;

+       static int aggressiveGCModificator = 250;
+       
        /** If true, local requests and inserts aren't cached.
         * This opens up a glaring vulnerability; connected nodes
         * can then probe the store, and if the node doesn't have the
@@ -1067,16 +1069,30 @@

                primaryIPUndetectedAlert = new IPUndetectedUserAlert();

+               int sortOrder = 0;
+               // Setup node-specific configuration
+               SubConfig nodeConfig = new SubConfig("node", config);
+               
+               
+               nodeConfig.register("aggressiveGC", aggressiveGCModificator, 
sortOrder++, true, "AggressiveGC modificator", "Enables the user to tweak the 
time in between GC and forced finalization. SHOULD NOT BE CHANGED unless you 
know what you're doing! -1 means : disable forced call to System.gc() and 
System.runFinalization()",
+                               new IntCallback() {
+                                       public int get() {
+                                               return aggressiveGCModificator;
+                                       }
+                                       public void set(int val) throws 
InvalidConfigValueException {
+                                               if(val == get()) return;
+                                               Logger.normal(this, "Changing 
aggressiveGCModificator to "+val);
+                                               aggressiveGCModificator = val;
+                                       }
+               });
+               
                //Memory Checking thread
+               // TODO: proper config. callbacks : maybe we shoudln't start 
the thread at all if it's not worthy
        this.myMemoryChecker = new Thread(new MemoryChecker(), "Memory 
checker");
        this.myMemoryChecker.setPriority(Thread.MAX_PRIORITY);
        this.myMemoryChecker.setDaemon(true);
-               
-               // Setup node-specific configuration
-               SubConfig nodeConfig = new SubConfig("node", config);

                // IP address override
-               int sortOrder = 0;
                nodeConfig.register("ipAddressOverride", "", sortOrder++, true, 
"IP address override", "IP address override (not usually needed)", new 
StringCallback() {

                        public String get() {


Reply via email to