0

メソッドを最適化して実行時間を短縮したい。私はSystem.currentTimeMillis()それが続いた時間を計算するために使用していました。

ただし、System.currentTimeMillis()Javadocを読んだところ、次のように書かれています。

システム時間を変更すると結果に影響を与える可能性があるため、この方法はタイムアウトやその他の経過時間の測定には使用しないでください。

では、経過時間を測定するために使用すべきではない場合、どのように測定すればよいでしょうか?

4

5 に答える 5

1

にはいくつかの問題がありますSystem.currentTimeMillis()

  1. システム クロックを制御できない場合は、経過時間を間違って読み取っている可能性があります。
  2. サーバー コードやその他の実行時間の長い Java プログラムの場合、コードは数千回以上の反復で呼び出される可能性があります。この時間の終わりまでに、JVM はバイトコードを最適化して、テストで測定した時間より実際にかかる時間が大幅に短くなるようにします。
  3. コンピューター上に他のプロセスが存在する可能性や、JVM 内に CPU 時間を競合する他のスレッドが存在する可能性があるという事実は考慮されていません。

この方法は引き続き使用できますが、上記の点に留意する必要があります。他の人が述べたように、プロファイラーはシステム パフォーマンスを測定するためのはるかに優れた方法です。

于 2013-06-17T08:49:41.257 に答える
-1

System.nanoTime() と呼ばれるものを使用できます。ここにあるように http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()

ドキュメントが言うように

このメソッドは、経過時間を測定するためにのみ使用でき、システム時間またはウォールクロック時間の他の概念とは関係ありません。

これが役立つことを願っています。

于 2013-06-17T08:45:21.467 に答える
-1

SystemClock.elapsedRealtime()

リンクされたページの単語を引用する:lapsedRealtime() およびlapsedRealtimeNanos() は、システムが起動してからの時間を返し、ディープ スリープを含みます。このクロックは単調であることが保証されており、CPU が省電力モードにあるときでも刻み続けます。そのため、汎用のインターバル タイミングの基準として推奨されます。

于 2013-06-17T08:45:25.560 に答える