假设我有一个 Java 程序Test.class
,如果我使用下面的脚本
for i in 1..10
do
java Test
done
每次java Test
调用JVM都会退出。
我想要的是在java Test
不退出 JVM 的情况下多次运行,以便以后运行可以使用先前运行中的优化方法,并可能进一步优化。
假设我有一个 Java 程序Test.class
,如果我使用下面的脚本
for i in 1..10
do
java Test
done
每次java Test
调用JVM都会退出。
我想要的是在java Test
不退出 JVM 的情况下多次运行,以便以后运行可以使用先前运行中的优化方法,并可能进一步优化。
为什么不编写一个 Java 程序,重复调用您要运行的程序的入口点呢?
运行一次
java Run
主程序Test
多次调用您的课程。
class Run {
public static void main(String[] args) {
for(int i=0; i<10; i++){
Test.main(args);
}
}
}
public class RunTest
{
public static void main(String[] args)
{
for(int i=1; i<=10; i++)
Test.main(args);
}
}
这应该这样做。您可以使用传递给主函数的相同参数调用测试类的主函数。这是另一张海报提到的“包装”。
使用这样的代码:
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
//...
}
PerhasProcessBuilder
合适吗?例如,像
String[] cmd = {"path/to/java", "test"};
ProcessBuilder proc = new ProcessBuilder(cmd);
Process process = proc.start();
您要做的是将循环放在Test
类中,或者将您想要循环的次数作为参数传递给main()
inside Test
。
笔记:
如果您正在查看JIT优化,则需要 10 多次迭代才能启动。
与前面的示例相同,但使用命令行参数
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