Test.class
以下のスクリプトを使用した場合、Javaプログラムがあるとします。
for i in 1..10
do
java Test
done
java Test
JVMは、呼び出されるたびに終了します。
私が欲しいのはjava Test
、JVMを終了せずに複数回実行することです。これにより、前の実行で最適化されたメソッドを後の実行で使用でき、場合によってはさらに最適化できます。
Test.class
以下のスクリプトを使用した場合、Javaプログラムがあるとします。
for i in 1..10
do
java Test
done
java Test
JVMは、呼び出されるたびに終了します。
私が欲しいのはjava Test
、JVMを終了せずに複数回実行することです。これにより、前の実行で最適化されたメソッドを後の実行で使用でき、場合によってはさらに最適化できます。
実行したいプログラムのエントリポイントを繰り返し呼び出す Java プログラムを作成してみませんか?
これを1回実行
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);
}
}
これでうまくいくはずです。メイン関数に渡すのと同じ引数を使用して、Test クラスのメイン関数を呼び出すことができます。これは、別のポスターが言及した「ラッパー」です。
次のようなコードを使用します。
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
//...
}
前の例と同じですが、コマンドライン引数を使用します
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) });
}
}
}
}
引数を使用して実行数を示します
$ java Test 10
やりたいことは、ループをTest
クラス内に置くか、ループする回数を引数として内部に渡すことmain()
ですTest
。
ノート:
JITの最適化を検討している場合、開始するまでに 10 回以上の反復が必要になります。
おそらくProcessBuilder
適切でしょうか?たとえば、次のようなもの
String[] cmd = {"path/to/java", "test"};
ProcessBuilder proc = new ProcessBuilder(cmd);
Process process = proc.start();