refactored worker and made the launch work on OSX/16G machine
[jalview.git] / src / jalview / bin / Jalview.java
index f776b27..062a22a 100755 (executable)
@@ -39,6 +39,7 @@ import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
+import jalview.util.Worker;
 import jalview.ws.jws2.Jws2Discoverer;
 
 import java.io.BufferedReader;
@@ -57,7 +58,10 @@ import java.security.CodeSource;
 import java.security.PermissionCollection;
 import java.security.Permissions;
 import java.security.Policy;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
@@ -188,15 +192,62 @@ public class Jalview
     float ONE_MB = 1048576f;
     Runtime runtime = Runtime.getRuntime();
     float maxMemory = runtime.maxMemory() / ONE_MB;
-    if (maxMemory < 1024 * 15)
+    boolean is9or10 = System.getProperty("java.version").startsWith("10.")
+            || System.getProperty("java.version").startsWith("9.")
+            || System.getProperty("java.version").startsWith("10.")
+            || System.getProperty("java.version").startsWith("1.10.")
+            || System.getProperty("java.version").startsWith("1.9.");
+    if (maxMemory < 1024 * 14)
     {
-      System.exit();
+      String cmd = "";
+      for (String r : args)
+      {
+        cmd += (cmd.length() == 0) ? r : " " + r;
+      }
+      if (cmd.indexOf("-Xmx") == -1)
+      {
+        cmd = "-Xmx15G " + cmd;
+        System.err.println("relaunching with 15G: " + cmd);
+        Worker worker = Worker.jalviewDesktopRunner(false, cmd, 0,
+                "-Xmx15G"
+                        + (is9or10 ? " --add-modules=\"java.se.ee\"" : ""));
+        worker.doEcho();
+        try
+        {
+        while (worker.getExitValue() == null)
+        {
+          try
+          {
+          Thread.sleep(2000);
+          } catch (Exception q)
+          {
+          }
+          ;
+        }
+        } catch (Exception q)
+        {
+        }
+        ;
+
+        System.exit(worker.getExitValue());
+      }
     }
 
-    if (System.ge)
+    List<String> rgs = new ArrayList();
+    rgs.addAll(Arrays.asList(args));
+    int i = 0;
+    while (i < rgs.size())
     {
-      instance = new Jalview();
+      if (rgs.get(i).indexOf("-Xmx") > -1)
+      {
+        rgs.remove(i);
+      }
+      else
+      {
+        i++;
+      }
     }
+    instance = new Jalview();
     instance.doMain(args);
   }