Javaでは、System.nanoTime()
の単調Linux上での実装という事実に依存しているCLOCK_MONOTONIC
OSで利用可能です。それができないなら、それはへのフォールバックgettimeofday
の間隔を用いて測定された負の時間間隔を得ることになりますnanoTime
。たとえば、次のテストが失敗することがあります。
long t1 = System.nanoTime();
long t2 = System.nanoTime();
assert t2 >= t1
どのようなケースではCLOCK_MONOTONIC
、サーバ上で使用できない場合がありますか?それは、と仮定することは合理的であるCLOCK_MONOTONIC
クロックは、すべての近代的なLinuxサーバ上で利用できるのですか?
はい。それを考えるのが妥当です。
gettime手動入力の文言から、我々はglibcのの本当に古いバージョンはサポートしていないことを推測することができますCLOCK_MONOTONIC
。(私はまだ何歳把握しようとしています...しかし、おそらくglibcのは、POSIX 1003.1準拠を主張する場合。)
CLOCK_MONOTONIC
それはサポートしていないに準拠したlibcの実装のための可能性が残っても、IEEE STD 1003.1、2004 Editionで(少なくとも)指定されましたCLOCK_MONOTONIC
。
Linuxカーネルのソースコードはのサポートを持っていたCLOCK_MONOTONIC
時計のLinux 3.0以降、少なくとも(2011)。
他のソースから、それはまた、あなたのシステムのglibcのが構築された方法によって異なります。(「エミュレートタイマー」で構築された場合は、CLOCK_MONOTONIC
サポートされていません。)
ここではサポートされていないいくつかの例は以下のとおりです。
いくつかの古いCPUチップに問題がある場合もあります。例えばhttps://bugzilla.redhat.com/show_bug.cgi?id=1499480
これは、Cygwinのいくつかの(すべて?)のバージョンでサポートされていません。
これは、ARM上のuClibcをの一部(全て?)のバージョンでサポートされていません。
ことも可能であるCLOCK_MONOTONIC
サポートされていますが、バギーなければ: