2

假设我有一个 Java 程序Test.class,如果我使用下面的脚本

for i in 1..10
do
    java Test
done

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

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

4

7 回答 7

4

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

于 2012-08-16T17:12:12.137 回答
3

运行一次

java Run

主程序Test多次调用您的课程。

class Run {

    public static void main(String[] args) {
        for(int i=0; i<10; i++){
            Test.main(args);
        }
    }
}
于 2012-08-16T17:21:16.733 回答
2
public class RunTest
 {
    public static void main(String[] args)
      {
          for(int i=1; i<=10; i++)
              Test.main(args); 
      }
 }

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

于 2012-08-16T17:21:14.377 回答
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
   //...
}
于 2012-08-16T17:18:05.237 回答
0

PerhasProcessBuilder合适吗?例如,像

String[] cmd = {"path/to/java", "test"};
ProcessBuilder proc = new ProcessBuilder(cmd);
Process process = proc.start();
于 2012-08-16T17:12:23.290 回答
0

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

笔记:

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

于 2012-08-16T17:13:08.747 回答
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
于 2012-08-16T17:32:00.963 回答