From f7c5ccedc7c5f2b86c0739a85f51083e451a6dd1 Mon Sep 17 00:00:00 2001 From: orbiter Date: Sun, 6 Jan 2008 00:31:26 +0000 Subject: [PATCH] more generics git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4301 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/PerformanceMemory_p.java | 3 +- htroot/Status.java | 4 +- htroot/xml/status_p.java | 7 ++-- source/de/anomic/server/serverMemory.java | 46 ++++------------------- source/yacy.java | 4 +- 5 files changed, 15 insertions(+), 49 deletions(-) diff --git a/htroot/PerformanceMemory_p.java b/htroot/PerformanceMemory_p.java index 0ad731b02..6fe6f21b0 100644 --- a/htroot/PerformanceMemory_p.java +++ b/htroot/PerformanceMemory_p.java @@ -58,7 +58,6 @@ import de.anomic.server.serverFileUtils; import de.anomic.server.serverMemory; import de.anomic.server.serverObjects; import de.anomic.server.serverSwitch; -//import de.anomic.kelondro.kelondroObjectSpace; public class PerformanceMemory_p { @@ -95,7 +94,7 @@ public class PerformanceMemory_p { 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 = serverMemory.max; + long memoryMax = Runtime.getRuntime().maxMemory(); prop.putNum("memoryMax", memoryMax / MB); prop.putNum("memoryAvailAfterStartup", (memoryMax - memoryTotalAfterStartup + memoryFreeAfterStartup) / MB); diff --git a/htroot/Status.java b/htroot/Status.java index 8a5d7621e..01c0260dd 100644 --- a/htroot/Status.java +++ b/htroot/Status.java @@ -54,8 +54,8 @@ import de.anomic.http.httpdByteCountInputStream; import de.anomic.http.httpdByteCountOutputStream; import de.anomic.plasma.plasmaSwitchboard; import de.anomic.server.serverCore; -import de.anomic.server.serverDomains; import de.anomic.server.serverDate; +import de.anomic.server.serverDomains; import de.anomic.server.serverMemory; import de.anomic.server.serverObjects; import de.anomic.server.serverSwitch; @@ -292,7 +292,7 @@ public class Status { // memory usage and system attributes prop.put("freeMemory", serverMemory.bytesToString(rt.freeMemory())); prop.put("totalMemory", serverMemory.bytesToString(rt.totalMemory())); - prop.put("maxMemory", serverMemory.bytesToString(serverMemory.max)); + prop.put("maxMemory", serverMemory.bytesToString(rt.maxMemory())); prop.put("processors", rt.availableProcessors()); // proxy traffic diff --git a/htroot/xml/status_p.java b/htroot/xml/status_p.java index cb89f1b99..9fee2d0e5 100644 --- a/htroot/xml/status_p.java +++ b/htroot/xml/status_p.java @@ -40,13 +40,12 @@ package xml; import de.anomic.http.httpHeader; +import de.anomic.http.httpdByteCountInputStream; +import de.anomic.http.httpdByteCountOutputStream; import de.anomic.plasma.plasmaSwitchboard; import de.anomic.server.serverObjects; import de.anomic.server.serverSwitch; -import de.anomic.server.serverMemory; import de.anomic.yacy.yacyCore; -import de.anomic.http.httpdByteCountInputStream; -import de.anomic.http.httpdByteCountOutputStream; public class status_p { @@ -75,7 +74,7 @@ public class status_p { final Runtime rt = Runtime.getRuntime(); prop.putNum("freeMemory", rt.freeMemory()); prop.putNum("totalMemory", rt.totalMemory()); - prop.putNum("maxMemory", serverMemory.max); + prop.putNum("maxMemory", rt.maxMemory()); prop.putNum("processors", rt.availableProcessors()); // proxy traffic diff --git a/source/de/anomic/server/serverMemory.java b/source/de/anomic/server/serverMemory.java index 5a46ab4ca..297c07cac 100644 --- a/source/de/anomic/server/serverMemory.java +++ b/source/de/anomic/server/serverMemory.java @@ -30,8 +30,6 @@ import de.anomic.tools.yFormatter; public class serverMemory { - public static boolean vm14 = System.getProperty("java.vm.version").startsWith("1.4"); - public static final long max = (vm14) ? computedMaxMemory() : Runtime.getRuntime().maxMemory() ; // patch for maxMemory bug in Java 1.4.2 private static final Runtime runtime = Runtime.getRuntime(); private static final serverLog log = new serverLog("MEMORY"); @@ -54,9 +52,9 @@ public class serverMemory { /** @return the amount of freed bytes by a forced GC this method performes */ private static long runGC(final boolean count) { - final long memnow = available(); + final long memnow = runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory(); gc(1000, "serverMemory.runGC(...)"); - final long freed = available() - memnow; + final long freed = runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory() - memnow; if (count) { gcs[gcs_pos] = freed; gcs_pos = (gcs_pos + 1) % gcs.length; @@ -96,19 +94,10 @@ public class serverMemory { * @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 - * @deprecated use {@link serverMemory#request(long, boolean)} instead to enable the collection of - * heuristics about explicit usage of Full GCs. */ - public static boolean available(long memory, boolean gciffail) { - if (available() >= memory) return true; - if (!gciffail) return false; - gc(4000, "serverMemory.available(...)"); - return (available() >= memory); - } - public static long available() { // memory that is available including increasing total memory up to maximum - return max - runtime.totalMemory() + runtime.freeMemory(); + return runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory(); } /** @@ -131,7 +120,7 @@ public class serverMemory { * @return whether enough memory could be freed (or is free) or not */ public static boolean request(final long size, final boolean force) { - long avail = available(); + long avail = runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory(); if (avail >= size) return true; if (log.isFine()) { String t = new Throwable("Stack trace").getStackTrace()[1].toString(); @@ -141,10 +130,10 @@ public class serverMemory { if (force || avg == 0 || avg + avail >= size) { // this is only called if we expect that an allocation of bytes would cause the jvm to call the GC anyway final long freed = runGC(!force); - avail = available(); + avail = runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory(); log.logInfo("performed " + ((force) ? "explicit" : "necessary") + " GC, freed " + (freed >> 10) - + " KB (requested/available/average: " + (size >> 10) + " / " - + (avail >> 10) + " / " + (avg >> 10) + " KB)"); + + " KB (requested/available/average: " + + (size >> 10) + " / " + (avail >> 10) + " / " + (avg >> 10) + " KB)"); return avail >= size; } else { log.logInfo("former GCs indicate to not be able to free enough memory (requested/available/average: " @@ -182,30 +171,11 @@ public class serverMemory { } } - private static int computedMaxMemory() { - // there is a bug in java 1.4.2 for maxMemory() - // see for bug description: - // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4686462 - // to get the correct maxMemory, we force a OutOfMemoryError here to measure the 'real' maxMemory() - int mb = 1024 * 1024; - byte[][] x = new byte[2048][]; - for (int i = 0; i < x.length; i++) { - try { - x[i] = new byte[mb]; - } catch (OutOfMemoryError e) { - x = null; // free memory - //System.out.println("* computed maxMemory = " + i + " mb"); - return (int) Math.max(i * mb, Runtime.getRuntime().totalMemory()); - } - } - return 2048 * mb; - } - 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 = " + (computedMaxMemory() / mb) + " mb"); + System.out.println("computed max = " + (Runtime.getRuntime().maxMemory() / mb) + " mb"); int alloc = 10000; Runtime rt = Runtime.getRuntime(); byte[][] x = new byte[100000][]; diff --git a/source/yacy.java b/source/yacy.java index 3653c73fe..1ca97fff4 100644 --- a/source/yacy.java +++ b/source/yacy.java @@ -81,7 +81,6 @@ import de.anomic.plasma.plasmaWordIndex; 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; @@ -604,7 +603,7 @@ public final class yacy { plasmaCrawlLURL minimizedUrlDB = new plasmaCrawlLURL(indexRoot2, 10000); Runtime rt = Runtime.getRuntime(); - int cacheMem = (int)(serverMemory.max-rt.totalMemory()); + int cacheMem = (int)(rt.maxMemory() - rt.totalMemory()); if (cacheMem < 2048000) throw new OutOfMemoryError("Not enough memory available to start clean up."); plasmaWordIndex wordIndex = new plasmaWordIndex(indexPrimaryRoot, indexSecondaryRoot, 10000, log); @@ -901,7 +900,6 @@ public final class yacy { 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 - serverMemory.available(); // force initialization of class serverMemory // go into headless awt mode System.setProperty("java.awt.headless", "true");