2de215749b56dcf3665fa5eff11cf8a76530ad8c
[jalview.git] / src / jalview / bin / MemoryPercent.java
1 package jalview.bin;
2
3 import java.lang.management.ManagementFactory;
4 import java.lang.management.OperatingSystemMXBean;
5
6 public class MemoryPercent
7 {
8
9   protected static long getPhysicalMemory()
10   {
11     final OperatingSystemMXBean o = ManagementFactory
12             .getOperatingSystemMXBean();
13
14     try
15     {
16       if (o instanceof com.sun.management.OperatingSystemMXBean)
17       {
18         final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o;
19         return osb.getTotalPhysicalMemorySize();
20       }
21     } catch (NoClassDefFoundError e)
22     {
23       // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM
24       System.out.println("No com.sun.management.OperatingSystemMXBean");
25     }
26
27     // We didn't get a com.sun.management.OperatingSystemMXBean.
28     return -1;
29   }
30
31   public static long memPercent(int percent)
32   {
33     return memPercent(percent);
34   }
35   public static long memPercent(float percent)
36   {
37     long memPercent = -1;
38
39     long physicalMem = getPhysicalMemory();
40     if (physicalMem > MemorySetting.applicationMinMemory)
41     {
42       // try and set at least applicationMinMemory and thereafter ensure
43       // leaveFreeMinMemory is left for the OS
44       memPercent = Math.max(MemorySetting.applicationMinMemory,
45               (long) (physicalMem
46                       - Math.max(physicalMem * (100 - percent) / 100,
47                               MemorySetting.leaveFreeMinMemory)));
48     }
49
50     return memPercent;
51   }
52
53 }