System.currentTimeMillis()は、Javaでの時間のパフォーマンスの最適な指標ですか?

StackOverflow https://stackoverflow.com/questions/1073325

  •  21-08-2019
  •  | 
  •  

質問

のSystem.currentTimeMillis()は、Javaでのタイムパフォーマンスの最適な指標でありますか?アクションが時間に取られる前に、アクションが取られた後の時間を比較するために、これを使用して、任意の落とし穴年代はありますか?より良い代替手段はありますか?

役に立ちましたか?

解決

私はないと思い - 私は<のhref = "http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#を使用していないとき、それは私が使用しているものですnanoTime()」REL = "noreferrer"> nanoTime()

他のヒント

System.nanoTime()のほか、JMXはおそらく最良の実行可能な選択肢です。

java.lang.management.ManagementFactory.getThreadMXBean()

あなたは(System.nanoTime用として、ナノ秒の精度でナノ秒単位で測定ではなく、())現在のスレッドのCPU時間を照会することができます。

あなたはを使用することができます測定可能Googleのグアバするからストップウォッチの時間の超簡単ます。

あなたが単調時間測定が必要な場合は、

、System.nanoTimeのは良い選択です。うるう秒、NTPの更新とジッタだけでなく、ユーザーが*システムクロックを設定する - のSystem.currentTimeMillisは、UTCのタイミング変動を受けやすいです。これは、タイミングアプリケーションの特定の種類のいくつかの壮観な障害を引き起こす可能性があります。 System.nanoTimeのは、すべてのものに免疫することになっています。

のSystem.nanoTimeの問題が(ユーザーが単独のシステムクロックを残すものとする)より長い時間スパンのためのSystem.currentTimeMillisが良くなって、定期的な数値オーバーフローや長期のタイミングの不正確さが含まれています。夏時間とタイムゾーンの変更はのSystem.currentTimeMillisに影響を与えるべきではないことに注意します。

* Windowsの「インターネット時刻と同期するには、」段階的な変更を行います。クライアントのタイムベース周波数を調整することで、サーバーを「追う」ことを適切なNTPクライアントの実装とは対照的に、これは、非常に破壊的なことができます。

のJava 1.5の前だけにSystem.currentTimeMillisがありました。しかし、値の粒度は、基礎となるオペレーティング・システムに依存し、大きくてもよいです。 Windows XPでは、私は時々は20msのギャップになってしまいました。私はLinuxは1-2msの範囲のギャップでずっといいです聞いています。

のJava 1.5を使用すると、またSystem.nanoTimeのを使用することができます。私はこの1つの問題を持っていたことはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top