如何在没有JVM退出的情况下多次运行Java程序?

时间:2012-08-16 17:09:43

标签: java bash jvm jvm-arguments

如果我使用下面的脚本

,假设我有一个Java程序Test.class
for i in 1..10
do
    java Test
done

每次调用java Test时JVM都会退出。

我想要的是多次运行java Test而不退出JVM,因此,先前运行中的优化方法可以在以后的运行中使用,并可能进一步优化。

7 个答案:

答案 0 :(得分:4)

为什么不编写一个重复调用要运行的程序入口点的Java程序?

答案 1 :(得分:3)

运行一次

java Run

主程序多次呼叫您的Test课程。

class Run {

    public static void main(String[] args) {
        for(int i=0; i<10; i++){
            Test.main(args);
        }
    }
}

答案 2 :(得分:2)

public class RunTest
 {
    public static void main(String[] args)
      {
          for(int i=1; i<=10; i++)
              Test.main(args); 
      }
 }

这应该这样做。您可以使用传递给main函数的相同参数调用Test类的main函数。这是另一张海报提到的“包装纸”。

答案 3 :(得分:1)

使用这样的代码:

public static void main2(String args[]){ // change main to main2
  for(int i=0;i<10;i++)main(args);
}
public static void main(String args[]){ // REAL main
   //...
}

答案 4 :(得分:0)

Perhas ProcessBuilder会合适吗?例如,

String[] cmd = {"path/to/java", "test"};
ProcessBuilder proc = new ProcessBuilder(cmd);
Process process = proc.start();

答案 5 :(得分:0)

您要做的是将循环放在Test类中,或者将要作为参数循环的次数传递给main()内的Test

注意:

如果您正在查看 JIT 优化,则需要超过10次迭代才能启动。

答案 6 :(得分:0)

与前面的示例相同,但使用命令行参数

public class Test {

    public static void main(String[] args) {
        if ( args.length > 0) {
            final Integer n = Integer.valueOf(args[0]);
            System.out.println("Running test " + n);
            if ( n > 1 ) {
                main(new String[] { Integer.toString(n-1) });
            }
        }
    }
}

使用args指示运行次数

$ java Test 10