4 import java.lang.management.ManagementFactory;
5 import java.util.ArrayList;
10 private final static String startClass = "jalview.bin.Jalview";
12 private final static int maxHeapSizePerCent = 95;
14 private final static String maxMemArg = "-maxMem";
16 public static void main(String[] args)
18 final String javaBin = System.getProperty("java.home") + File.separator
19 + "bin" + File.separator + "java";
21 ArrayList<String> command = new ArrayList<>();
24 for (String jvmArg : ManagementFactory.getRuntimeMXBean()
30 command.add(ManagementFactory.getRuntimeMXBean().getClassPath());
31 ArrayList<String> arguments = new ArrayList<>();
32 boolean maxMem = false;
33 for (String arg : args)
35 if (arg.equals(maxMemArg) && !maxMem)
38 // remove any existing max heap size argument
39 ARG: for (int i = 0; i < command.size(); i++)
41 if (command.get(i).startsWith("-Xmx"))
44 break ARG; // assuming at most one -Xmx
48 long physicalMem = getPhysicalMemory();
51 maxMemLong = physicalMem * maxHeapSizePerCent / 100;
55 command.add("-Xmx" + Long.toString(maxMemLong));
63 command.add(startClass);
64 command.addAll(arguments);
66 final ProcessBuilder builder = new ProcessBuilder(command);
68 System.out.println("COMMAND: " + builder.command().toString());
82 public static long getPhysicalMemory()
84 final Object o = ManagementFactory.getOperatingSystemMXBean();
88 if (o instanceof com.sun.management.OperatingSystemMXBean)
90 final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o;
91 return osb.getTotalPhysicalMemorySize();
93 } catch (NoClassDefFoundError e)
95 // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM
96 System.out.println("No com.sun.management.OperatingSystemMXBean");
99 // We didn't get a com.sun.management.OperatingSystemMXBean.