3 import java.lang.management.ManagementFactory;
4 import java.lang.management.OperatingSystemMXBean;
6 public class MemoryPercent
9 protected static long getPhysicalMemory()
11 final OperatingSystemMXBean o = ManagementFactory
12 .getOperatingSystemMXBean();
16 if (o instanceof com.sun.management.OperatingSystemMXBean)
18 final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o;
19 return osb.getTotalPhysicalMemorySize();
21 } catch (NoClassDefFoundError e)
23 // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM
25 "No com.sun.management.OperatingSystemMXBean: cannot get total physical memory size");
28 // We didn't get a com.sun.management.OperatingSystemMXBean.
32 public static long memPercentAmount(int percent)
34 return memPercentAmount((float)percent);
36 public static long memPercentAmount(float percent)
38 long memPercentAmount = -1;
40 long physicalMem = getPhysicalMemory();
41 if (physicalMem > MemorySetting.applicationMinMemory)
43 // try and set at least applicationMinMemory and thereafter ensure
44 // leaveFreeMinMemory is left for the OS
46 memPercentAmount = (long) ((physicalMem * percent) / 100F);
48 // check for memory left for OS
49 if (physicalMem - memPercentAmount < MemorySetting.leaveFreeMinMemory)
51 memPercentAmount = physicalMem - MemorySetting.leaveFreeMinMemory;
54 // check for minimum application memsize
55 if (memPercentAmount < MemorySetting.applicationMinMemory)
57 memPercentAmount = MemorySetting.applicationMinMemory;
60 // not enough memory for application, just try and grab what we can!
61 memPercentAmount = physicalMem;
64 return memPercentAmount;