ホームページ  >  記事  >  Java  >  Java の System.nanoTime() は依然として信頼できる時間測定ツールですか?

Java の System.nanoTime() は依然として信頼できる時間測定ツールですか?

DDD
DDDオリジナル
2024-11-12 00:55:031013ブラウズ

Is System.nanoTime() in Java Still a Reliable Time Measurement Tool?

Java の System.nanoTime() は本当に役に立たないのですか?

質問:

A 「Java の System.nanoTime() に注意してください」というタイトルのブログ投稿では、x86 システムでは、CPU 固有のカウンターの使用により、System.nanoTime() が誤った時刻値を返す可能性があるという懸念を提起しています。マルチコア システムでは、スレッド スケジューリングにより、より低いカウンタを持つプロセッサが割り当てられ、時差が負の値になる可能性があります。

答え:

ブログ投稿の主張は 2011 年に書かれたものであり、もはや正確ではありません。その後のオペレーティング システムの更新により、Windows および Linux でのこれらの問題は解決されました。

Windows:

Windows XP Service Pack 2 以降では、System.nanoTime() は QueryPerformanceCounter を使用します。 /QueryPerformanceFrequency API。プロセッサ間で一貫したタイム ソースを提供するためにハードウェア抽象化層 (HAL) によって実装されます。

Linux:

Linux の Clock_gettime(CLOCK_REALTIME)この機能により、時間がすべてのプロセッサ間で一貫していることが保証されます。カーネル バージョン 2.6.18 では、非同期または可変周波数のタイムスタンプ カウンタが検出された場合、安全なクロックソースが使用されます。

その他のアーキテクチャ:

情報は限られていますSPARC や Solaris などの他のアーキテクチャについても利用できます。ただし、一般に、最新の仮想マシン (VM) は、基盤となるハードウェアに関係なく、ゲスト オペレーティング システムに一貫したタイム ソースを提供すると考えられています。

結論:

システム.nanoTime() は、Java で時差を測定するための有効なメソッドであり続けます。 2011 年のブログ投稿で提起された懸念は解決されており、最新のシステム実装には当てはまりません。

以上がJava の System.nanoTime() は依然として信頼できる時間測定ツールですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。