X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FMemorySetting.java;fp=src%2Fjalview%2Fbin%2FMemorySetting.java;h=b3bae2df110ec6933c89891f1817859cf41bd304;hb=b419d3b17606d478c234678487ff34d97bfa83cc;hp=0000000000000000000000000000000000000000;hpb=b0716c75367a82443cd516ef3ea08708dacd92e9;p=jalview.git diff --git a/src/jalview/bin/MemorySetting.java b/src/jalview/bin/MemorySetting.java new file mode 100644 index 0000000..b3bae2d --- /dev/null +++ b/src/jalview/bin/MemorySetting.java @@ -0,0 +1,51 @@ +package jalview.bin; + +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; + +public class MemorySetting +{ + public static final long leaveFreeMinMemory = 536870912; // 0.5 GB + + public static final long applicationMinMemory = 536870912; // 0.5 GB + + protected static long getPhysicalMemory() + { + final OperatingSystemMXBean o = ManagementFactory + .getOperatingSystemMXBean(); + + try + { + if (o instanceof com.sun.management.OperatingSystemMXBean) + { + final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o; + return osb.getTotalPhysicalMemorySize(); + } + } catch (NoClassDefFoundError e) + { + // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM + System.out.println("No com.sun.management.OperatingSystemMXBean"); + } + + // We didn't get a com.sun.management.OperatingSystemMXBean. + return -1; + } + + public static long memPercent(int percent) + { + long memPercent = -1; + + long physicalMem = getPhysicalMemory(); + if (physicalMem > applicationMinMemory) + { + // try and set at least applicationMinMemory and thereafter ensure + // leaveFreeMinMemory is left for the OS + memPercent = Math.max(applicationMinMemory, + physicalMem - Math.max(physicalMem * (100 - percent) / 100, + leaveFreeMinMemory)); + } + + return memPercent; + } + +}