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 Cache.log.error("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; } }