14

スループットテストを行っています。私のアプリケーションはする必要があります

  1. JMSから読み取る
  2. いくつかの処理を行います
  3. JMSへの書き込み

ここでの私の目標は、#2の「いくつかの処理」をシミュレートすることです。つまり、遅延を導入し、イベントを転送する前に、所定の時間(たとえば、500ミリ秒)CPUを占有します。

素朴なアプローチはになりThread.sleep(500)ます。これにより、実行に適切な遅延が発生しますが、CPUは実行されません。

フィボナッチ数の計算は1つのオプションです。 CPUを一定時間ビジー状態に保つためだけに、興味深い手法を使用した人はいますか?

理想的な特性は次のとおりです。

  • (たとえば)ループで回転するだけでなく、さまざまな命令を実行します
  • HotSpotVMが最適化するものではありません
  • 処理期間を上下に調整する簡単な方法があります(完了するまでの時間はハードウェアによって明らかに異なります)
4

5 に答える 5

22

次のような簡単なことを試すことができます

private static void spin(int milliseconds) {
    long sleepTime = milliseconds*1000000L; // convert to nanoseconds
    long startTime = System.nanoTime();
    while ((System.nanoTime() - startTime) < sleepTime) {}
}

テスト:

public static void main(String[] args) {
    final int NUM_TESTS = 1000;
    long start = System.nanoTime();
    for (int i = 0; i < NUM_TESTS; i++) {
        spin(500);
    }
    System.out.println("Took " + (System.nanoTime()-start)/1000000 +
        "ms (expected " + (NUM_TESTS*500) + ")");
}

私の出力:

$ java SpinTest
Took 500023ms (expected 500000)

そのため、ループは最適化されませんでした (そして、これをテストするためだけに、CPU を 8 分間 100% にスパイクしました :))。

于 2008-12-19T21:09:17.437 に答える
5

Cipher.update() を呼び出して、文字列を (ループで) 暗号化します。暗号化アルゴリズムは、定義上、最適化が非常に困難です。唯一の問題は、実行する必要があるいくつかの重要なセットアップがあることです。この回答をコミュニティ ウィキとしてマークして、最近書いた人が記入できるようにします。

于 2008-12-19T20:38:25.097 に答える
4

Collections.shuffle()ランダム オブジェクトの非常に大きなコレクションを作成し、とを交互に呼び出しますCollections.sort()

Jakarta Commons Lang を使用して、シャッフル/ソートの目的でランダムな文字列を生成しました。

于 2008-12-19T20:44:52.977 に答える
0

あなたが使用できるさらに別のもの、多分:

        long start  = System.currentTimeMillis();
        long count = 0l;
        for(long x=0;x<Integer.MAX_VALUE ;x++){
            count+=1;
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start +" ms");
于 2015-06-25T11:49:37.290 に答える
0

マトリックスを作成し、いくつかのマトリックス操作を行います。

マトリックスのサイズを変えることで、非常に簡単に調整できます。

于 2008-12-19T21:33:02.880 に答える