package jalview.bin; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; public class MemoryPercent { 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.err.println( "No com.sun.management.OperatingSystemMXBean: cannot get total physical memory size"); } // We didn't get a com.sun.management.OperatingSystemMXBean. return -1; } public static long memPercentAmount(int percent) { return memPercentAmount((float)percent); } public static long memPercentAmount(float percent) { long memPercentAmount = -1; long physicalMem = getPhysicalMemory(); if (physicalMem > MemorySetting.applicationMinMemory) { // try and set at least applicationMinMemory and thereafter ensure // leaveFreeMinMemory is left for the OS memPercentAmount = (long) ((physicalMem * percent) / 100F); // check for memory left for OS if (physicalMem - memPercentAmount < MemorySetting.leaveFreeMinMemory) { memPercentAmount = physicalMem - MemorySetting.leaveFreeMinMemory; } // check for minimum application memsize if (memPercentAmount < MemorySetting.applicationMinMemory) { memPercentAmount = MemorySetting.applicationMinMemory; } } else { // not enough memory for application, just try and grab what we can! memPercentAmount = physicalMem; } return memPercentAmount; } }