簡體   English   中英

如何在沒有JVM退出的情況下多次運行Java程序?

[英]How to run a Java program multiple times without JVM exiting?

假設我有一個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); 
      }
 }

這應該做到這一點。 您可以使用傳遞給main函數的相同參數調用Test類的main函數。 這是另一張海報提到的“包裝紙”。

使用這樣的代碼:

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
   //...
}

Perhas一個ProcessBuilder會適合嗎? 比如,像

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

你想要做的就是把循環里面什么Test類或傳遞要循環的次數作為參數傳遞給main()內部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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM