0

私はASMJavaバイトコードインストルメンテーションを使用しており、私の目標は変数への各アクセスの時間を測定することです。

**時間とログを測定します**

**可変アクセス**

マイクロ秒の解像度を探しています。正確であるため、十分に「安価」である必要があります(つまり、時間を取得するのに10ミリ秒かかる関数やライブラリは必要ありません)。

私はSystem.NanoTime()(多すぎて、費用がかかりすぎて)そしてCalendar(緩すぎて)試しましたが、より良い代替案を探しています。

4

2 に答える 2

6

System.nanotime()ネイティブメソッド呼び出しです。それがコストがかかりすぎる場合は、Java でニーズに適したものを見つけることができないでしょう。

実行に10ミリ秒もかかるとは思いSystem.nanotime()ません(特に速度を落とすために何かをしない限り)。

最後に、マイクロ秒がプロパティへのアクセス時間に十分正確であるかどうかはわかりませんが、ナノ秒の方が便利かもしれません。

于 2011-02-25T09:46:42.713 に答える
2

… 時間を取得するのに 10 ミリ秒もかかる関数やライブラリは使いたくない

まず、あなたは誇張しています。System.nanoTime()10ミリ秒かかりません。

第二に、純粋な Java でより高速な方法があるとは思いません。ネイティブ コードからより高速にシステム クロックにアクセスできる可能性がありますが、コードはプラットフォーム固有になります。(さらに、私の直感ではSystem.nanoTime()、できるだけ早くそれを行うということです。)


コンテキストとアクセスしている変数の種類によっては、変数へのアクセスに数回の機械語命令が必要になる場合があります。これは、システムタイマーへのアクセスにかかる時間によって圧倒される可能性があります。

さらに、変数アクセスの前にクロック メソッドへのメソッド呼び出しを挿入すると、変数アクセスに時間がかかる場合があります。メソッド呼び出しは、レジスターの内容を無効にする傾向があり、コード ジェネレーターがメモリから変数を再フェッチする命令を挿入します。

つまり、クロック時間を取得するコードを挿入すると、信頼性が低く誤解を招くタイミングの数値が得られる可能性があります。LONG シーケンスの命令のタイミングをとることで、より意味のある数値を取得できる可能性がありますが、それでもベンチマーク方法論を間違えると、偽の数値が得られる可能性があります。

于 2011-02-25T09:46:20.450 に答える