我有一箇舊的應用程序,一個JAR文件,經過一些增強。基本上,代碼的某些部分必須隨着修改某些邏輯而被修改。測量Java程序性能
比較OLD版本和NEW版本,NEW版本比舊版本慢大約2倍。
我想縮小什麼導致減速,但我發現自己用System.currentTimeMillis()使用System.println測量某些for-loops的時間。這真的變得非常單調乏味。
是否有一個Java性能工具,可以幫助我弄清新JAR爲何比舊版本慢大約2倍?
在此先感謝。
我有一箇舊的應用程序,一個JAR文件,經過一些增強。基本上,代碼的某些部分必須隨着修改某些邏輯而被修改。測量Java程序性能
比較OLD版本和NEW版本,NEW版本比舊版本慢大約2倍。
我想縮小什麼導致減速,但我發現自己用System.currentTimeMillis()使用System.println測量某些for-loops的時間。這真的變得非常單調乏味。
是否有一個Java性能工具,可以幫助我弄清新JAR爲何比舊版本慢大約2倍?
在此先感謝。
根據過程的運行時間,我會考慮Visual VM 1.3.3。如果你下載所有的插件,你將能夠看到堆,線程,對象等,這應該有所幫助,而且不會花費一分錢。
我相信它假定Oracle/Sun JVM。
你應該使用一個分析器。這將告訴你哪些方法花費的時間最多(以及調用它們的是什麼),而不必猜測要測量哪些方法。
的Java帶有一個內置分析器稱爲hprof,還能看到:
一個Profiler工具像YourKit或可以像Hyperic's Sigar一樣可靠地測量性能爲你的情況提供一個好的選擇。看看這些工具。
由於Oracle的JVM & OpenJDK無法可靠/始終如一地獲取性能指標,因此前者會發現代碼和/或內存泄漏(不是全部)的瓶頸,而後者是可以可靠地測量性能的API。準確地(如CPU掛鐘時間或從應用程序花費的CPU時間,內存使用情況,應用程序線程等)。
默認情況下,Java爲這些東西提供了軟件包。
例如:
java.lang.management.ManagementFactory
java.lang.management.ThreadMXBean
但根據您的情況下,他們可能會或可能是不夠的(記住,他們是在大多數情況下,除非確定我們所談論的事情的關鍵)。
JProfiler有能力比較CPU快照。記錄舊JAR文件和新JAR文件的執行情況並保存快照(如果JVM在最後退出,則配置保存快照的「JVM退出」觸發器)。
然後使用「在新窗口中的會話 - >比較快照」打開快照比較窗口並添加兩個快照。一個熱點比較看起來像這樣(視圖設置過濾器在這種情況下):
它會立即顯示出哪些方法負責執行時間的增加。
來分析執行時間的差異的另一種方法是調用樹比較,這將是這樣的:
免責聲明:我公司開發的JProfiler。
參見http://stackoverflow.com/questions/410437/is-stopwatch-benchmarking-acceptable和http://stackoverflow.com/questions/447739/java-performance-testing,可能幾個人... – DNA 2012-03-03 21:52:57