4

Javaでメソッドの実行時間を出力したい. 現在、次のコードを使用しています。

long startTime = System.currentTimeMillis();
// method body
long runTime= System.currentTimeMillis() - startTime;
System.out.println(" XYZ Method execution time: " + runTime);

プロジェクトでランタイムを見つけたいメソッドがたくさんありますが、すべてのメソッドでこのコードを書かないようにする方法はありますか?

このプロジェクトでは、Spring 2.5、Struts 2 を使用しています。

編集:すべてのメソッドにロジックを追加したくありません。たとえば、ロジックを一度書き、実行時間を出力する必要があるメソッドを指定できる何らかの構成を使用したいと思います。したがって、メソッドが実行されるたびに、ランタイムが自動的にコンソールに出力されます。1 つの方法は、コードをプロローグとエピローグに追加することですが、メソッドを編集したくありません。時間がかかり、同じコードを書くことは良い習慣ではありません。

4

4 に答える 4

4

CodahaleのMetricsパッケージを参照することをお勧めします。このパッケージは、JMX またはその他のメカニズムを介して報告されるさまざまなメトリック (タイミングを含む) を収集します。

于 2013-03-12T05:24:07.980 に答える
2

オプション1::AOPを使用

オプション2::適切な場所(前後)でログを記録していて、ログにタイムスタンプを挿入している場合は、任意の分析ツール(logrythm、splunkのオープンソースバージョンなど)を使用してクランチすることができます。あなたのログと時間を把握します。ただし、ロギングは一般にコストのかかる操作であることに注意してください(AOPもある程度コストがかかります)。

どちらのアプローチを採用する場合でも、パフォーマンス自体を測定するためだけに、アプリケーションに与えるパフォーマンスへの影響を考慮に入れてください:-)。

于 2013-03-12T17:34:05.870 に答える
2

YourKitJVisualVMなどのプロファイラーを使用しないでください。JVisualVM には JDK が付属しています。本当にこれを自分で行いたい場合は、 and を使用java.lang.instrumentASMて独自のエージェントを作成してください。このアプローチを使用すると、Java メソッドのプロローグとエピローグにロジックを簡単に追加できます。

開始するためのリンクは次のとおりです。

于 2013-03-12T05:19:58.837 に答える
1

Spring AOP を見てみましょう。アドバイスの周りを使用して、メソッドの実行時間を計算できます。

春 2.5

スプリング 3.0×

于 2013-03-12T05:30:08.370 に答える