4 import java.lang.management.ManagementFactory;
5 import java.lang.management.OperatingSystemMXBean;
6 import java.util.ArrayList;
11 private final static String startClass = "jalview.bin.Jalview";
13 private final static int maxHeapSizePerCent = 95;
15 private final static String dockIconPath = "JalviewLogo_Huge.png";
17 public static void main(String[] args)
19 final String javaBin = System.getProperty("java.home") + File.separator
20 + "bin" + File.separator + "java";
22 ArrayList<String> command = new ArrayList<>();
25 boolean isAMac = System.getProperty("os.name").indexOf("Mac") > -1;
27 for (String jvmArg : ManagementFactory.getRuntimeMXBean()
33 command.add(ManagementFactory.getRuntimeMXBean().getClassPath());
34 ArrayList<String> arguments = new ArrayList<>();
35 for (String arg : args)
40 // add memory setting if not specified
41 boolean memSet = false;
42 boolean dockIcon = false;
43 ARG: for (int i = 0; i < command.size(); i++)
45 String arg = command.get(i);
46 if (arg.startsWith("-Xmx"))
50 else if (arg.startsWith("-Xdock:icon"))
59 long physicalMem = getPhysicalMemory();
62 maxMemLong = physicalMem * maxHeapSizePerCent / 100;
66 command.add("-Xmx" + Long.toString(maxMemLong));
70 if (!dockIcon && isAMac)
72 command.add("-Xdock:icon=" + dockIconPath);
73 // -Xdock:name=... doesn't actually work :(
74 // Leaving it in in case it gets fixed
75 command.add("-Xdock:name=" + "Jalview");
78 command.add(startClass);
79 command.addAll(arguments);
81 final ProcessBuilder builder = new ProcessBuilder(command);
83 System.out.println("COMMAND: " + String.join(" ", builder.command()));
88 Process process = builder.start();
98 public static long getPhysicalMemory()
100 final OperatingSystemMXBean o = ManagementFactory
101 .getOperatingSystemMXBean();
105 if (o instanceof com.sun.management.OperatingSystemMXBean)
107 final com.sun.management.OperatingSystemMXBean osb = (com.sun.management.OperatingSystemMXBean) o;
108 return osb.getTotalPhysicalMemorySize();
110 } catch (NoClassDefFoundError e)
112 // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM
113 System.out.println("No com.sun.management.OperatingSystemMXBean");
116 // We didn't get a com.sun.management.OperatingSystemMXBean.