0

Javaファイルのメイン関数を(100)回のように数回呼び出して、完了するまでにかかる時間を測定する必要があります。目的は、時間を他のファイルと比較することです。[文字通り、私はアルゴリズムを実装しています]。

時間の計算は次の方法で実現できることを知っています。

long startTime = System.currentTimeMillis();
GetExecutionTimes ext=new GetExecutionTimes();

ext.callMethod();
long endTime = System.currentTimeMillis();

System.out.println("Total elapsed time in execution of method callMethod() is :"
+ (endTime-startTime));

* ("callMethod") はメソッドの名前です。

しかし、完全な Java ファイルがあり、その実行時間を計算しながら別のクラス (またはファイル) からメイン関数を呼び出したい場合、どのようにすればよいでしょうか?

要約すれば:

タスク 1: Java ファイルのメイン関数を別のクラスから数回呼び出す。
タスク 2:実行にかかる時間を計算します (タスク 1)。

タスク 1 と 2 を達成するための提案やアイデアをいただければ幸いです。

よろしくお願いいたします。

4

4 に答える 4

3

JVM、JIT、ガベージ コレクション、およびさまざまな非プログラム スレッドがベンチマークを混乱させる可能性があることを十分に理解せずに、このようなベンチマークを実行しないように注意してください。

優れたベンチマークを収集することはできますが、測定値にかなりのノイズが含まれるため、最終的には統計上の課題になります (JVM がガベージ コレクションをスケジュールしているために、JVM はコードをネイティブ命令にコンパイルするために一時停止し、ネイティブ命令は一般的に非ネイティブよりもはるかに高速に実行されます)。

つまり、他の静的メソッドと同じように static main メソッドを呼び出すことができます。本当に「同じ」呼び出しが必要な場合は、おそらく args 配列を保存する必要があることに注意してください。

于 2011-05-13T19:01:38.830 に答える
3

何度か呼び出したい場合は、ループを使用します。メソッドは複数回呼び出すことができますmain(String[])が、基礎となるアルゴリズムを呼び出す方がよい場合があります。

于 2011-05-13T18:58:04.347 に答える
2

JUnitテスト ケースを作成し、ランナーでテストのメソッドを呼び出してみてください (内部的に実際のオブジェクトのメインを呼び出します)。そうすれば、JUnit を介して実行時間を取得できます。

于 2011-05-13T18:58:46.990 に答える
1

main() はクラス内のパブリックな静的メソッドにすぎないため、いつでも次のように呼び出すことができます

for (int i = 0; i < 100; i++) {
    MyClassWithMain.main(null);
}
于 2011-05-13T18:57:12.847 に答える