2012-03-03 83 views
2

我有一箇舊的應用程序,一個JAR文件,經過一些增強。基本上,代碼的某些部分必須隨着修改某些邏輯而被修改。測量Java程序性能

比較OLD版本和NEW版本,NEW版本比舊版本慢大約2倍。

我想縮小什麼導致減速,但我發現自己用System.currentTimeMillis()使用System.println測量某些for-loops的時間。這真的變得非常單調乏味。

是否有一個Java性能工具,可以幫助我弄清新JAR爲何比舊版本慢大約2倍?

在此先感謝。

+0

參見http://stackoverflow.com/questions/410437/is-stopwatch-benchmarking-acceptable和http://stackoverflow.com/questions/447739/java-performance-testing,可能幾個人... – DNA 2012-03-03 21:52:57

回答

0

根據過程的運行時間,我會考慮Visual VM 1.3.3。如果你下載所有的插件,你將能夠看到堆,線程,對象等,這應該有所幫助,而且不會花費一分錢。

我相信它假定Oracle/Sun JVM。

0

一個Profiler工具像YourKit或可以像Hyperic's Sigar一樣可靠地測量性能爲你的情況提供一個好的選擇。看看這些工具。
由於Oracle的JVM & OpenJDK無法可靠/始終如一地獲取性能指標,因此前者會發現代碼和/或內存泄漏(不是全部)的瓶頸,而後者是可以可靠地測量性能的API。準確地(如CPU掛鐘時間或從應用程序花費的CPU時間,內存使用情況,應用程序線程等)。

默認情況下,Java爲這些東西提供了軟件包。

例如:
java.lang.management.ManagementFactory
java.lang.management.ThreadMXBean
但根據您的情況下,他們可能會或可能是不夠的(記住,他們是在大多數情況下,除非確定我們所談論的事情的關鍵)。

2

JProfiler有能力比較CPU快照。記錄舊JAR文件和新JAR文件的執行情況並保存快照(如果JVM在最後退出,則配置保存快照的「JVM退出」觸發器)。

然後使用「在新窗口中的會話 - >比較快照」打開快照比較窗口並添加兩個快照。一個熱點比較看起來像這樣(視圖設置過濾器在這種情況下):

enter image description here

它會立即顯示出哪些方法負責執行時間的增加。

來分析執行時間的差異的另一種方法是調用樹比較,這將是這樣的:

enter image description here

免責聲明:我公司開發的JProfiler。