重新启动具有更大堆空间的JVM

Mat*_*rth 4 java heap jvm reboot relaunch

我希望能够执行.Jar文件,如果堆空间设置不够大,它应该启动一个具有相同.Jar文件的新JVM,但设置更大的堆空间,然后关闭第一个JVM和.Jar.

我已经尝试过使用ProcessBuilder,但我无法让它工作.

它必须跨平台工作.

-ONi

Mat*_*rth 6

我找到了解决方案,它可以跨平台工作.要从代码重新启动JVM,请使用以下命令.这个答案取自我在这里搜索数小时后发现的另一个问题.如果需要,可以使用System.exit(0)跟随它,以在调用此方法后终止启动新进程的JVM.

public static void startSecondJVM() throws Exception {
    String separator = System.getProperty("file.separator");
    String classpath = System.getProperty("java.class.path");
    String path = System.getProperty("java.home")
            + separator + "bin" + separator + "java";
    ProcessBuilder processBuilder = 
            new ProcessBuilder(path, "-Xmx1024m", "-cp",
            classpath, 
            Main.class.getName());
    Process process = processBuilder.start();
}
Run Code Online (Sandbox Code Playgroud)