1

メソッドが完了するまでにかかる時間を記録しようとしています。私はもともとメソッド全体のタイミングを計っていましたが、数値が少しずれているように見えたので、個々のパスがforループを通過するタイミングを決めることにしました。

奇妙なことに、ループが進行するにつれて、エンキュー操作は毎回速くなるように見えます。q.enqueue()を呼び出すたびに、インクリメントされた文字列( "String1"、 "String2"、....など)がリンクリストキューにエンキューされます。

num = 100にすると、各パスに約4,000ナノ秒かかります。ただし、numを100,000に増やすと、最初の数百回のパスで再び約4,000回かかることがわかりますが、徐々に速くなり、最後の100回程度は316ナノ秒または0ナノ秒になります。

nanotimeの使用が100%正確になるわけではないことは知っていますが、ループが進むにつれて明らかに速くなります。

ここで何が起こっているのですか?

public static void enqueueLoop(int num, Queue q){       
    for (int i=0;i<num;i++){
        long start, enqueueTime;

        start = System.nanoTime();
        q.enqueue("String" + (i+1));
        qTime = System.nanoTime() - start;

        System.out.println("Enqueue Operation took: " + NumberFormat.getInstance().format(qTime) + " nanoseconds");     
    }
}
4

1 に答える 1

3

JIT(Just In Timeコンパイラ)は、コードが頻繁に再利用されていることを確認した後に起動し、ネイティブコードにコンパイルします。

于 2013-02-09T19:45:18.893 に答える