… 時間を取得するのに 10 ミリ秒もかかる関数やライブラリは使いたくない
まず、あなたは誇張しています。System.nanoTime()
10ミリ秒かかりません。
第二に、純粋な Java でより高速な方法があるとは思いません。ネイティブ コードからより高速にシステム クロックにアクセスできる可能性がありますが、コードはプラットフォーム固有になります。(さらに、私の直感ではSystem.nanoTime()
、できるだけ早くそれを行うということです。)
コンテキストとアクセスしている変数の種類によっては、変数へのアクセスに数回の機械語命令が必要になる場合があります。これは、システムタイマーへのアクセスにかかる時間によって圧倒される可能性があります。
さらに、変数アクセスの前にクロック メソッドへのメソッド呼び出しを挿入すると、変数アクセスに時間がかかる場合があります。メソッド呼び出しは、レジスターの内容を無効にする傾向があり、コード ジェネレーターがメモリから変数を再フェッチする命令を挿入します。
つまり、クロック時間を取得するコードを挿入すると、信頼性が低く誤解を招くタイミングの数値が得られる可能性があります。LONG シーケンスの命令のタイミングをとることで、より意味のある数値を取得できる可能性がありますが、それでもベンチマーク方法論を間違えると、偽の数値が得られる可能性があります。