JavaのVisualVMの中の合計方法時間
質問
のJava VisualVMのは、むしろ「セルフタイム」よりも、トータル方法の時間を表示する方法はありますか? (それはあなたの方法は、実際に実行するために取るどのくらいの時間については何も教えてくれないので、後者は、特に有用ではありません。)
ない場合は、、総メソッド時間を計算し任意のスタンドアロン無料のJavaプロファイラはありますか?
解決
「スナップショット」ビューでトレースデータを見ると、あなたが合計だけでなく、自己の時間を確認することができます。
を押して結果のテーブルについて表示され、「スナップショット」ボタンを押します。これは、合計時間対自己を破壊する「コールツリー」ビューを含む新しいタブが作成されます。 「組み合わせ」ビューはまた、この情報を提供するが、標準的なプロファイリング図に類似している「ホットスポット」ビューのスクリーン空間を分割します。
スナップショットは、標準の「プロファイラ」または「サンプラー」データのいずれかから作成することができます。アプリケーションが閉じられる前に、「サンプラー」のものは、いつでも作成することができながら、しかし、「プロファイラ」のスナップショットは、作成することができます。
(上記の情報は、VisualVMの1.3.1に基づいている)
他のヒント
ただ、プロファイリング結果のスナップショットを取ります。あなたはそこに壁時計の時間だけでなく、自己の時間を取得します。
(むしろミリ秒未満)壁時計実行時間のパーセントとしてルーチンの合計時間を取得するための簡単な方法があります。ちょうどあなたがそれを待っている間stackshotsの束を取得するには、Ctrl-ブレークを使用してください。ルーチンを含むそれらの割合は、それにかかる時間の%です。精度は、あなたが取るどのように多くのショットに依存します。あなただけの問題がどこにあるかを探しているなら、あなたは精密な時間測定を必要としません。 はここにそれがどのように動作するかの簡単な説明です。に
私はあなたが各メソッドの実行が取るんどのくらいの時間を知りたいと思います。あなたは、パフォーマンスを監視するためにJETMを使用したいと思います。 これは、入場時間、終了時間と各メソッドの時間差を与えるだろう。あなたはどのくらいの時間がかかっている方法を見つけるでしょう。
あなたが春を使用している場合は、それはJETMを統合することが容易になります http://jetm.void.fm/howto/spring_2_x_integration.htmlする
あなたはyou.thereのための時間を実行する方法を監視するために、JProfilerをまたは一部javaagentツールを使用することができますsimpleAPMのように、githubの上のいくつかのオープンソースツールです。
JavaAssistはソースに触れることなく、あなたのJavaバイトコードを操作するためのクラスライブラリです。のは、測定の例を見てみましょう 時間メソッドを実行するために取られます。
public class Subject {
/**
* Timetaken for start & end of the method
*
* @throws InterruptedException
*/
public void method2() throws InterruptedException {
// Some business logic :)
Thread.sleep(2000);
}
}
subject.method2()
を実行するのにかかった時間を測定するには、あなたが示すように、コードの開始および方法の終わりを追加することにより、Subject.methods()
性を高めることができます。
public class JavaAssist {
public static void main(String[] args) {
timeTaken();
}
public static void timeTaken() {
try {
ClassPool p = ClassPool.getDefault();
CtClass cc = p.get("Subject");
CtMethod meth2 = cc.getDeclaredMethod("method2");
meth2.insertBefore("System.out.println(\" Start : \"+new java.util.Date());");
meth2.insertAfter("System.out.println(\" End : \"+new java.util.Date());");
// cc.writeFile(".");
Class c = cc.toClass();
Subject s = (Subject) c.newInstance();
s.method2();
cc.detach();
} catch (Exception e) {
// suppressed
}
}
}
出力: 開始:水曜日5月26日午後五時24分18秒EDT 2010 終了:水曜日5月26日午前17時24分20秒EDT 2010
リファレンス http://www.csg.is .titech.ac.jp /〜千葉/ Javassistの/チュートリアル/ tutorial.html位を読む
のhttp://www.csg.is.titech .ac.jp /〜千葉/ Javassistの/ HTML / の
起源ポストから: http://www.senthilb.com/2010/05/ javaassistバイトコード-enhancement.html の
あなたは使用することができます。
long startTime = System.currentTimeMillis();
先頭に
と
long endTime = System.currentTimeMillis();
、最後に結果を取得する
long result = endTime - startTime; //Note, part might be backwards, I don't
//Remember