残念ながら、現時点では Java RTS が十分に成熟しているとは思いません。
Java 時間は最高の価値を提供しようとします (実際には、ネイティブ コードに委譲してカーネル時間を取得します)。ただし、JVM 仕様では、主に GC アクティビティや基盤となるシステムのサポートなどについて、この粗い時間測定の免責事項を作成しています。
- 同時 GC を実行している場合でも、特定の GC アクティビティがすべてのスレッドをブロックします。
- デフォルトの Linux クロック ティックの精度はわずか 10 ミリ秒です。Linuxカーネルがサポートしていない場合、Javaはそれを改善することはできません.
アプリで GC を実行する必要がない場合を除き、#1 に対処する方法がわかりません。まともな中サイズのアプリケーションは、GC の一時停止におそらく数十ミリ秒かかることがあります。精度要件が 10 ミリ秒未満の場合は、おそらく不運です。
#2に関しては、Linuxカーネルを調整してより正確にすることができます。ただし、カーネルコンテキストの切り替えがより頻繁に行われるようになったため、すぐに使える量も少なくなります。
おそらく、私たちはそれを別の角度から見る必要があります。OPS が 10ms 未満の精度を必要とする理由はありますか? Ops に精度が 10 ミリ秒であることを伝え、その時点での GC ログも確認して、その時間に GC アクティビティがなくても、時刻が +-10 ミリ秒の精度であることを確認してもよろしいですか?