在Java VisualVM中,是否有任何方法顯示總方法時間,而不是「自我時間」? (後者不是特別有用,因爲它沒有告訴你有多少時間實際運行的方法。)Java VisualVM中的總方法時間
如果沒有,是否有任何獨立的免費Java分析器計算總方法時間?
在Java VisualVM中,是否有任何方法顯示總方法時間,而不是「自我時間」? (後者不是特別有用,因爲它沒有告訴你有多少時間實際運行的方法。)Java VisualVM中的總方法時間
如果沒有,是否有任何獨立的免費Java分析器計算總方法時間?
查看「快照」視圖中的跟蹤數據可以查看總時間和自我時間。
按關於結果表的「快照」按鈕。這將創建一個新的選項卡,其中包含一個「調用樹」視圖,該視圖將自我與總時間分開。 「組合」視圖還提供了這些信息,但將屏幕空間與「標準概覽視圖」類似的「熱點」視圖分開。
快照可以從標準的「Profiler」或「Sampler」數據創建。但是,「Profiler」快照只能在應用程序關閉之前創建,而「Sampler」則可以隨時創建。
(以上信息基於VisualVM 1.3。1)
你可以使用一個
long startTime = System.currentTimeMillis();
在beggining
和
long endTime = System.currentTimeMillis();
終於得到結果
long result = endTime - startTime; //Note, part might be backwards, I don't
//Remember
有一個簡單的方式來獲得總時間佔時鐘執行時間的百分比(而不是毫秒)。只需使用ctrl-break在你等待的時候獲得一堆堆棧照片即可。其中包含例程的部分是所花時間的百分比。準確度取決於您拍攝的次數。如果您只是在尋找問題所在,則不需要精確的時間測量。 Here's a short explanation of how it works.
只需創建性能分析結果的快照。你將獲得掛鐘時間以及在那裏的自我時間。
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日17時24分18秒EDT 2010 結束:週三5月26日17時24分20秒EDT 2010
參考 http://www.csg.is.titech.ac.jp/~chiba/javassist/tutorial/tutorial.html#read
http://www.csg.is.titech.ac.jp/~chiba/javassist/html/
原產地來源: http://www.senthilb.com/2010/05/javaassist-byte-code-enhancement.html
我想你想知道每個方法執行需要多少時間。你會想用JETM來監控性能。 這會給你入場時間,退出時間和每種方法的時差。你會發現哪種方法需要花費多少時間。
如果您在使用Spring那麼就很容易整合JETM http://jetm.void.fm/howto/spring_2_x_integration.html
可以使用JProfiler的或者一些javaagent工具來監控方法you.there執行時間是在GitHub的一些開源工具,如simpleAPM。
這個答案是最深刻和有益的。我做了一個簡短的截屏:http://rhnh.net/2011/08/03/profiling-clojure – 2011-08-03 10:46:44
澤維爾,謝謝你的截屏。它說得很清楚。 – 2014-10-21 08:25:23