22

タイミングを合わせるために、 System.nanoTime()ペアでコードを頻繁にラップします。何かのようなもの:

long start = System.nanoTime();    
methodToBeTimed();
long elapsedTime = System.nanoTime() - start;

この問題に役立つ適切なタイミングライブラリはありますか?また、自家製のコードも受け入れられます。

NB

単体テストで時間の制約を適用したいので、プロファイラーはここでは解決策ではありません。そのため、プログラムでメソッドのタイミングを調整したいと思います。

4

12 に答える 12

10

プロジェクトはアクティブではなくなったため、この回答は無視してください

使ったことはありませんが、最近perf4jに出くわしました。

于 2009-08-06T08:44:47.527 に答える
9

あなたの質問に対する直接の答えではありませんが、私はこのヒントを使用してコードの時間を計り、次の単純なEclipse->サラウンドウィズテンプレートを作成しました。

long startTime = System.currentTimeMillis();
${line_selection}${cursor}
long totalTime = System.currentTimeMillis() - startTime;
System.out.println("Total time = " + totalTime);
System.out.println();
于 2009-08-06T06:12:13.077 に答える
8

JUnit 4には、タイミング制約機能が組み込まれています。

@Test(timeout = X)

トリックを行う必要があります。Xは、メソッドの実行が許可されている最大ミリ秒数です。

于 2009-08-06T08:25:41.577 に答える
7

commons-langのStopWatchがあり、タイマーを分割することもできます。

于 2009-08-06T06:27:51.580 に答える
4

Springを使用している場合は、この提案のクラスパスにStopWatchという素敵なクラスがすでにあります。

于 2009-09-10T21:27:47.167 に答える
2

JETMは、これを行うための優れたライブラリです。また、最小値、最大値、平均値を提供でき、さらに有益なグラフを生成できます。

于 2011-12-07T12:54:14.687 に答える
1

JPerfを試しましたか?

于 2009-08-06T06:16:25.673 に答える
1

この問題についてどのような助けを求めていますか?基本が整っています。経過時間はナノ秒単位で取得され、基盤となるOS/ハードウェアが可能な解像度に正確に対応します。

また...そしてあなたがプロファイラーを言わなかったことを私は知っています...しかし私はYourKitで素晴らしい経験をしました。これは、外部からのプロファイリングを制御するために使用できるAPIを提供します。あなたの正確な問題が何であるかに応じて、これは一見の価値があるかもしれません。

于 2009-08-06T06:17:13.240 に答える
1

キャリパー

そして、そのサイトのwikiを読むことに加えて、私は読むことをお勧めします:

于 2011-12-07T13:32:57.833 に答える
1

市場で新しいものはJMHです。これは、openjdkプロジェクトの傘下で作成されています。

于 2014-09-25T14:06:58.530 に答える
1

Java Simon(以前はGoogle Code )を使い始めたばかりですが、すばらしいようです。依存関係がほとんどないストップウォッチとカウンターのシンプルなセット。

于 2014-11-02T23:36:19.347 に答える
0

コモンズの単純なラッパー-マルチスレッド環境を考慮したlangStopWatchは、stopが呼び出されない場合、leap statはカウントされず、「failed leaps count」が増分されます(動作が必要な場合は、finallyブロックにstopを含めないでください)。 JMXを介して統計をライブ化し、ネットワークを介して統合されたシリアル化可能な結果を​​提供します。使用例:

private PerfStat methodPerf = new PerfStat("method.under.test");
...
public void myMethod() {
    methodPerf.start();
    ...
    long timeNs = methodPerf.stop();
}

依存

<dependency>
    <groupId>org.droolsassert</groupId>
    <artifactId>da-utils</artifactId>
</dependency>
于 2012-05-17T12:10:24.027 に答える