Author: danielr
Date: 2008-03-02 16:42:50 +0100 (Sun, 02 Mar 2008)
New Revision: 4522

Modified:
   trunk/htroot/PerformanceMemory_p.java
   trunk/htroot/Status.java
   trunk/htroot/xml/status_p.java
   trunk/source/dbtest.java
   trunk/source/de/anomic/index/indexRAMRI.java
   trunk/source/de/anomic/kelondro/kelondroEcoTable.java
   trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java
   trunk/source/de/anomic/server/serverMemory.java
   trunk/source/yacy.java
Log:
consistent use of de.anomic.server.serverMemory to get information about memory 
statistics

Modified: trunk/htroot/PerformanceMemory_p.java
===================================================================
--- trunk/htroot/PerformanceMemory_p.java       2008-03-01 12:08:24 UTC (rev 
4521)
+++ trunk/htroot/PerformanceMemory_p.java       2008-03-02 15:42:50 UTC (rev 
4522)
@@ -87,15 +87,15 @@
             }
         }
         
-        long memoryFreeNow = Runtime.getRuntime().freeMemory();
+        long memoryFreeNow = serverMemory.free();
         long memoryFreeAfterInitBGC = 
Long.parseLong(env.getConfig("memoryFreeAfterInitBGC", "0"));
         long memoryFreeAfterInitAGC = 
Long.parseLong(env.getConfig("memoryFreeAfterInitAGC", "0"));
         long memoryFreeAfterStartup = 
Long.parseLong(env.getConfig("memoryFreeAfterStartup", "0"));
-        long memoryTotalNow = Runtime.getRuntime().totalMemory();
+        long memoryTotalNow = serverMemory.total();
         long memoryTotalAfterInitBGC = 
Long.parseLong(env.getConfig("memoryTotalAfterInitBGC", "0"));
         long memoryTotalAfterInitAGC = 
Long.parseLong(env.getConfig("memoryTotalAfterInitAGC", "0"));
         long memoryTotalAfterStartup = 
Long.parseLong(env.getConfig("memoryTotalAfterStartup", "0"));
-        long memoryMax = Runtime.getRuntime().maxMemory();
+        long memoryMax = serverMemory.max();
         
         prop.putNum("memoryMax", memoryMax / MB);
         prop.putNum("memoryAvailAfterStartup", (memoryMax - 
memoryTotalAfterStartup + memoryFreeAfterStartup) / MB);

Modified: trunk/htroot/Status.java
===================================================================
--- trunk/htroot/Status.java    2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/htroot/Status.java    2008-03-02 15:42:50 UTC (rev 4522)
@@ -288,12 +288,10 @@
             prop.put("omode", "2");
         }
 
-        final Runtime rt = Runtime.getRuntime();
-
         // memory usage and system attributes
-        prop.put("freeMemory", serverMemory.bytesToString(rt.freeMemory()));
-        prop.put("totalMemory", serverMemory.bytesToString(rt.totalMemory()));
-        prop.put("maxMemory", serverMemory.bytesToString(rt.maxMemory()));
+        prop.put("freeMemory", 
serverMemory.bytesToString(serverMemory.free()));
+        prop.put("totalMemory", 
serverMemory.bytesToString(serverMemory.total()));
+        prop.put("maxMemory", serverMemory.bytesToString(serverMemory.max()));
         prop.put("processors", serverProcessor.availableCPU);
 
         // proxy traffic

Modified: trunk/htroot/xml/status_p.java
===================================================================
--- trunk/htroot/xml/status_p.java      2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/htroot/xml/status_p.java      2008-03-02 15:42:50 UTC (rev 4522)
@@ -43,6 +43,7 @@
 import de.anomic.http.httpdByteCountInputStream;
 import de.anomic.http.httpdByteCountOutputStream;
 import de.anomic.plasma.plasmaSwitchboard;
+import de.anomic.server.serverMemory;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverProcessor;
 import de.anomic.server.serverSwitch;
@@ -72,10 +73,9 @@
 
                //
                // memory usage and system attributes
-               final Runtime rt = Runtime.getRuntime();
-        prop.putNum("freeMemory", rt.freeMemory());
-        prop.putNum("totalMemory", rt.totalMemory());
-        prop.putNum("maxMemory", rt.maxMemory());
+        prop.putNum("freeMemory", serverMemory.free());
+        prop.putNum("totalMemory", serverMemory.total());
+        prop.putNum("maxMemory", serverMemory.max());
         prop.putNum("processors", serverProcessor.availableCPU);
 
                // proxy traffic

Modified: trunk/source/dbtest.java
===================================================================
--- trunk/source/dbtest.java    2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/source/dbtest.java    2008-03-02 15:42:50 UTC (rev 4522)
@@ -270,8 +270,7 @@
         boolean assertionenabled = false;
         assert assertionenabled = true;
         if (assertionenabled) System.out.println("*** Asserts are enabled"); 
else System.out.println("*** HINT: YOU SHOULD ENABLE ASSERTS! (include -ea in 
start arguments");
-        Runtime runtime = Runtime.getRuntime();
-        long mb = (runtime.maxMemory() - runtime.totalMemory() + 
runtime.freeMemory()) / 1024 / 1024;
+        long mb = serverMemory.available() / 1024 / 1024;
         System.out.println("*** RAM = " + mb + " MB");
         System.out.print(">java " +
                 ((assertionenabled) ? "-ea " : "") +
@@ -398,14 +397,14 @@
                     
                     System.out.println("Loop " + loop + ": Write = " + write + 
", Remove = " + remove);
                     System.out.println(" bevore GC: " +
-                              "free = " + Runtime.getRuntime().freeMemory() +
-                            ", max = " + Runtime.getRuntime().maxMemory() +
-                            ", total = " + Runtime.getRuntime().totalMemory());
+                              "free = " + serverMemory.free() +
+                            ", max = " + serverMemory.max() +
+                            ", total = " + serverMemory.total());
                     System.gc();
                     System.out.println(" after  GC: " +
-                            "free = " + Runtime.getRuntime().freeMemory() +
-                          ", max = " + Runtime.getRuntime().maxMemory() +
-                          ", total = " + Runtime.getRuntime().totalMemory());
+                            "free = " + serverMemory.free() +
+                          ", max = " + serverMemory.max() +
+                          ", total = " + serverMemory.total());
                   loop++;
                 }
             }

Modified: trunk/source/de/anomic/index/indexRAMRI.java
===================================================================
--- trunk/source/de/anomic/index/indexRAMRI.java        2008-03-01 12:08:24 UTC 
(rev 4521)
+++ trunk/source/de/anomic/index/indexRAMRI.java        2008-03-02 15:42:50 UTC 
(rev 4522)
@@ -169,7 +169,7 @@
                             + " words done, "
                             + (cache.size() / (wordsPerSecond + 1))
                             + " seconds remaining, free mem = "
-                            + (Runtime.getRuntime().freeMemory() / 1024 / 1024)
+                            + (serverMemory.free() / 1024 / 1024)
                             + "MB");
                     messageTime = System.currentTimeMillis() + 5000;
                 }
@@ -209,7 +209,6 @@
                 //long creationTime;
                 indexRWIRowEntry wordEntry;
                 kelondroRow.EntryIndex row;
-                //Runtime rt = Runtime.getRuntime();
                 while (i.hasNext()) {
                     // get out one entry
                     row = i.next();
@@ -221,12 +220,12 @@
                     addEntry(wordHash, wordEntry, startTime, false);
                     urlCount++;
                     // protect against memory shortage
-                    //while (rt.freeMemory() < 1000000) {flushFromMem(); 
java.lang.System.gc();}
+                    //while (serverMemory.free() < 1000000) {flushFromMem(); 
java.lang.System.gc();}
                     // write a log
                     if (System.currentTimeMillis() > messageTime) {
                         serverMemory.gc(1000, "indexRAMRI, for better 
statistic-2"); // for better statistic - thq
                         urlsPerSecond = 1 + urlCount * 1000 / (1 + 
System.currentTimeMillis() - startTime);
-                        log.logInfo("restoring status: " + urlCount + " urls 
done, " + ((dumpArray.size() - urlCount) / urlsPerSecond) + " seconds 
remaining, free mem = " + (Runtime.getRuntime().freeMemory() / 1024 / 1024) + 
"MB");
+                        log.logInfo("restoring status: " + urlCount + " urls 
done, " + ((dumpArray.size() - urlCount) / urlsPerSecond) + " seconds 
remaining, free mem = " + (serverMemory.free() / 1024 / 1024) + "MB");
                         messageTime = System.currentTimeMillis() + 5000;
                     }
                 }
@@ -363,7 +362,7 @@
                     return hash;
                 }
                 // cases with respect to memory situation
-                if (Runtime.getRuntime().freeMemory() < 100000) {
+                if (serverMemory.free() < 100000) {
                     // urgent low-memory case
                     hash = (String) hashScore.getMaxObject(); // flush 
high-score entries (saves RAM)
                 } else {

Modified: trunk/source/de/anomic/kelondro/kelondroEcoTable.java
===================================================================
--- trunk/source/de/anomic/kelondro/kelondroEcoTable.java       2008-03-01 
12:08:24 UTC (rev 4521)
+++ trunk/source/de/anomic/kelondro/kelondroEcoTable.java       2008-03-02 
15:42:50 UTC (rev 4522)
@@ -100,7 +100,7 @@
             long neededRAM4table = ((long) records) * (((long) 
rowdef.objectsize) + 4L) * 3L;
             table = ((neededRAM4table < maxarraylength) &&
                      ((useTailCache == tailCacheForceUsage) ||
-                      ((useTailCache == tailCacheUsageAuto) && 
(Runtime.getRuntime().freeMemory() > neededRAM4table + 200 * 1024 * 1024)))) ?
+                      ((useTailCache == tailCacheUsageAuto) && 
(serverMemory.free() > neededRAM4table + 200 * 1024 * 1024)))) ?
                     new kelondroRowSet(taildef, records) : null;
             System.out.println("*** DEBUG " + tablefile + ": available RAM: " 
+ (serverMemory.available() / 1024 / 1024) + "MB, allocating space for " + 
records + " entries");
             long neededRAM4index = 2 * 1024 * 1024 + records * 
(rowdef.primaryKeyLength + 4) * 3 / 2;

Modified: trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java
===================================================================
--- trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java   2008-03-01 
12:08:24 UTC (rev 4521)
+++ trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java   2008-03-02 
15:42:50 UTC (rev 4522)
@@ -428,7 +428,7 @@
             count++;
             if ((count % 1000) == 0) {
                 l = java.lang.Math.max(1, (System.currentTimeMillis() - start) 
/ 1000);
-                System.out.println("processed " + count + " citations, " + 
(count / l) + " per second, rci.size = " + rci.size() + ", " + ((size - count) 
/ (count / l) / 60) + " minutes remaining; mem = " + 
Runtime.getRuntime().freeMemory());
+                System.out.println("processed " + count + " citations, " + 
(count / l) + " per second, rci.size = " + rci.size() + ", " + ((size - count) 
/ (count / l) / 60) + " minutes remaining; mem = " + serverMemory.free());
             }
         }
 

Modified: trunk/source/de/anomic/server/serverMemory.java
===================================================================
--- trunk/source/de/anomic/server/serverMemory.java     2008-03-01 12:08:24 UTC 
(rev 4521)
+++ trunk/source/de/anomic/server/serverMemory.java     2008-03-02 15:42:50 UTC 
(rev 4522)
@@ -28,6 +28,9 @@
 import de.anomic.server.logging.serverLog;
 import de.anomic.tools.yFormatter;
 
+/**
+ * Use this to get information about memory usage or try to free some memory
+ */
 public class serverMemory {
 
     private static final Runtime runtime = Runtime.getRuntime();
@@ -38,6 +41,11 @@
 
     private static long lastGC;
 
+    /**
+     * Runs the garbage collector if last garbage collection is more than last 
millis ago
+     * @param last time which must be passed since lased gc
+     * @param info additional info for log
+     */
     public final synchronized static void gc(int last, String info) { // thq
         long elapsed = System.currentTimeMillis() - lastGC;
         if (elapsed > last) {
@@ -50,11 +58,15 @@
         }
     }
 
-    /** @return the amount of freed bytes by a forced GC this method performes 
*/
+    /**
+     * Tries to free count bytes
+     * @param count bytes
+     * @return the amount of freed bytes by a forced GC this method performes
+     */
     private static long runGC(final boolean count) {
-        final long memnow = runtime.maxMemory() - runtime.totalMemory() + 
runtime.freeMemory();
+        final long memBefore = available();
         gc(1000, "serverMemory.runGC(...)");
-        final long freed = runtime.maxMemory() - runtime.totalMemory() + 
runtime.freeMemory() - memnow;
+        final long freed = available() - memBefore;
         if (count) {
             gcs[gcs_pos] = freed;
             gcs_pos = (gcs_pos + 1) % gcs.length;
@@ -78,29 +90,41 @@
         return (y == 0) ? 0 : x / y;
     }
 
-    public static long free() {
-        // memory that is free without increasing of total memory taken from os
+    /**
+     * memory that is free without increasing of total memory taken from os
+     * @return bytes
+     */
+    public static final long free() {
         return runtime.freeMemory();
     }
     
     /**
-     * Tries to free a specified amount of bytes. If the currently available 
memory is enough, the
-     * method returns <code>true</code> without performing additional steps. 
Otherwise - if
-     * <code>gciffail</code> is set - a Full GC is run, if 
<code>gciffail</code> is set to
-     * <code>false</code> and not enough memory is available, this method 
returns <code>false</code>.
-     * 
-     * @see serverMemory#request(long, boolean) for another implementation
-     * @param memory amount of bytes to be assured to be free
-     * @param gciffail if not enough memory is available, this parameter 
specifies whether to perform
-     * a Full GC to free enough RAM
-     * @return whether enough RAM is available
+     * memory that is available including increasing total memory up to maximum
+     * @return bytes
      */
     public static final long available() {
-        // memory that is available including increasing total memory up to 
maximum
-        return runtime.maxMemory() - runtime.totalMemory() + 
runtime.freeMemory();
+        return max() - total() + free();
     }
     
     /**
+     * maximum memory which the vm can use
+        * @return bytes
+        */
+       public static final long max()
+       {
+               return runtime.maxMemory();
+       }
+
+       /**
+        * currently allocated memory in the Java virtual machine; may vary 
over time
+        * @return bytes
+        */
+       public static final long total()
+       {
+               return runtime.totalMemory();
+       }
+
+       /**
      * <p>Tries to free a specified amount of bytes.</p>
      * <p>
      *   If the currently available memory is enough, the method returns 
<code>true</code> without
@@ -120,7 +144,7 @@
      * @return whether enough memory could be freed (or is free) or not
      */
     public static boolean request(final long size, final boolean force) {
-        long avail = runtime.maxMemory() - runtime.totalMemory() + 
runtime.freeMemory();
+        long avail = available();
         if (avail >= size) return true;
         if (log.isFine()) {
             String t = new Throwable("Stack 
trace").getStackTrace()[1].toString();
@@ -130,7 +154,7 @@
         if (force || avg == 0 || avg + avail >= size) {
             // this is only called if we expect that an allocation of <size> 
bytes would cause the jvm to call the GC anyway
             final long freed = runGC(!force);
-            avail = runtime.maxMemory() - runtime.totalMemory() + 
runtime.freeMemory();
+            avail = available();
             log.logInfo("performed " + ((force) ? "explicit" : "necessary") + 
" GC, freed " + (freed >> 10)
                     + " KB (requested/available/average: "
                     + (size >> 10) + " / " + (avail >> 10) + " / " + (avg >> 
10) + " KB)");
@@ -142,11 +166,19 @@
         }
     }
     
+    /**
+     * memory that is currently bound in objects
+     * @return used bytes
+     */
     public static long used() {
-        // memory that is currently bound in objects
-        return runtime.totalMemory() - runtime.freeMemory();
+        return total() - free();
     }
     
+    /**
+     * Formats a number if it are bytes to greatest unit (1024 based)
+     * @param byteCount
+     * @return formatted String with unit
+     */
     public static String bytesToString(long byteCount) {
         try {
             final StringBuffer byteString = new StringBuffer();
@@ -171,21 +203,24 @@
         }
     }
     
+    /**
+     * main
+     * @param args
+     */
     public static void main(String[] args) {
         // try this with a jvm 1.4.2 and with a jvm 1.5 and compare results
         int mb = 1024 * 1024;
         System.out.println("vm: " + System.getProperty("java.vm.version"));
-        System.out.println("computed max = " + 
(Runtime.getRuntime().maxMemory() / mb) + " mb");
+        System.out.println("computed max = " + (max() / mb) + " mb");
         int alloc = 10000;
-        Runtime rt = Runtime.getRuntime();
         byte[][] x = new byte[100000][];
         for (int i = 0; i < 100000; i++) {
             x[i] = new byte[alloc];
             if (i % 100 == 0) System.out.println("used = " + (i * alloc / mb) +
-                    ", total = " + (rt.totalMemory() / mb) +
-                    ", free = " + (rt.freeMemory() / mb) +
-                    ", max = " + (rt.maxMemory() / mb) +
-                    ", avail = " + ((rt.maxMemory() - rt.totalMemory() + 
rt.freeMemory()) / mb));
+                    ", total = " + (total() / mb) +
+                    ", free = " + (free() / mb) +
+                    ", max = " + (max() / mb) +
+                    ", avail = " + (available() / mb));
         }
 
     }

Modified: trunk/source/yacy.java
===================================================================
--- trunk/source/yacy.java      2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/source/yacy.java      2008-03-02 15:42:50 UTC (rev 4522)
@@ -83,6 +83,7 @@
 import de.anomic.server.serverCore;
 import de.anomic.server.serverDate;
 import de.anomic.server.serverFileUtils;
+import de.anomic.server.serverMemory;
 import de.anomic.server.serverSemaphore;
 import de.anomic.server.serverSystem;
 import de.anomic.server.logging.serverLog;
@@ -392,11 +393,11 @@
 
                     // save information about available memory after all 
initializations
                     //try {
-                        sb.setConfig("memoryFreeAfterInitBGC", 
Runtime.getRuntime().freeMemory());
-                        sb.setConfig("memoryTotalAfterInitBGC", 
Runtime.getRuntime().totalMemory());
+                        sb.setConfig("memoryFreeAfterInitBGC", 
serverMemory.free());
+                        sb.setConfig("memoryTotalAfterInitBGC", 
serverMemory.total());
                         System.gc();
-                        sb.setConfig("memoryFreeAfterInitAGC", 
Runtime.getRuntime().freeMemory());
-                        sb.setConfig("memoryTotalAfterInitAGC", 
Runtime.getRuntime().totalMemory());
+                        sb.setConfig("memoryFreeAfterInitAGC", 
serverMemory.free());
+                        sb.setConfig("memoryTotalAfterInitAGC", 
serverMemory.total());
                     //} catch (ConcurrentModificationException e) {}
                     
                     // signal finished startup
@@ -605,8 +606,7 @@
             // db used to hold all neede urls
             plasmaCrawlLURL minimizedUrlDB = new plasmaCrawlLURL(indexRoot2);
             
-            Runtime rt = Runtime.getRuntime();
-            int cacheMem = (int)(rt.maxMemory() - rt.totalMemory());
+            int cacheMem = (int)(serverMemory.max() - serverMemory.total());
             if (cacheMem < 2048000) throw new OutOfMemoryError("Not enough 
memory available to start clean up.");
                 
             plasmaWordIndex wordIndex = new plasmaWordIndex(indexPrimaryRoot, 
indexSecondaryRoot, log);
@@ -645,8 +645,8 @@
                         log.logInfo(wordCounter + " words scanned " +
                                 "[" + wordChunkStartHash + " .. " + 
wordChunkEndHash + "]\n" + 
                                 "Duration: "+ 500*1000/duration + " words/s" +
-                                " | Free memory: " + rt.freeMemory() + 
-                                " | Total memory: " + rt.totalMemory());
+                                " | Free memory: " + serverMemory.free() + 
+                                " | Total memory: " + serverMemory.total());
                         wordChunkStart = wordChunkEnd;
                         wordChunkStartHash = wordChunkEndHash;
                     }
@@ -901,8 +901,8 @@
         
         // check memory amount
         System.gc();
-        long startupMemFree  = Runtime.getRuntime().freeMemory(); // the 
amount of free memory in the Java Virtual Machine
-        long startupMemTotal = Runtime.getRuntime().totalMemory(); // the 
total amount of memory in the Java virtual machine; may vary over time
+        long startupMemFree  = serverMemory.free();
+        long startupMemTotal = serverMemory.total();
         
         // go into headless awt mode
         System.setProperty("java.awt.headless", "true");

_______________________________________________
YaCy-svn mailing list
YaCy-svn@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/yacy-svn

Antwort per Email an