2011-11-02 40 views
0

代碼質量有很多工具。但是如果代碼不符合鱈魚品質的規則,有時也需要獲得性能。存在一些開源工具嗎? 謝謝。Java代碼性能工具anaylizer

+0

你可能想對這個問題進行一些擴展。簡要說明您正在嘗試分析的應用程序。作爲一個例子,如果你的應用程序是IO重要的,性能增益可能不會來自代碼。這是一個非常廣泛的話題。如果您在問題中提供了更多詳細信息,則可能會收到其他人在性能調整方面取得成功的提示。 – Sean

回答

2

有沒有工具,但你可以嘗試jVisualVM,但是。

http://download.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html

它通常附帶你的JDK。 @C:\Program Files\Java\jdk1.6.0_21\bin

+0

我喜歡Visual VM,但它不會告訴你代碼如何影響「cod」[原文]質量的性能或規則。它會顯示你的內存,CPU等,但它不會告訴你如果你的措施是次優的,該怎麼辦。我建議獲取版本1.3.2,並安裝所有插件,而不是與JVM捆綁的插件。 – duffymo

0

沒有工具會告訴你性能和質量。兩者都很難衡量。

您當然可以使用FindBugs或IntelliJ's Inspector來檢查您的代碼,但他們只會查找違規規則。我沒有意識到有一個工具會在我編寫代碼執行的很糟糕時指出。 Java代碼檢查器如何知道您的數據庫沒有索引?

+1

你有紅色問題或你不知道主題。我的建議請閱讀一些關於調整Java性能的書籍,你會發現很多有關的技巧。另外例如PMD產生一些性能提示。 – user810430

+0

衡量績效可能並不困難[但它不難改善](http://stackoverflow.com/questions/266373/one-could-use-a-profiler-but-why-not-just -halt最程序/ 317160#317160)。 –

+0

這對開源工具有什麼幫助?你的觀點是正確的;我認爲這個問題很糟糕。 – duffymo

0

我無法回答您關於代碼質量的問題。其他人可以。但是當你「需要獲得性能」時,我寧願告訴你如何去做,而不是告訴你使用什麼工具。

有工具,但比工具更重要的是理解你在做什麼。 最重要的是要明白,測量不會告訴你要獲得更高性能需要修復的問題;它只會告訴你你得到了多少改善。

來提高性能的方法是找到活動,不管他們是,這考慮到時間一個顯著分數和可以提高。 測量沒有找到。 實施例:

我手動可以sample the state of a program,幾次,看它多的時間做的容器類的操作,如提取元件,測試結束條件等 (這就是發現一部分。) 這可能會在代碼中的許多不同位置發生,因此沒有特定的例程會導致花費大量時間。 沒有特定的熱點或明顯的瓶頸。 沒有「壞算法」或「慢例程」,人們說他們尋找的東西的種類。儘管如此,我可以在這幾個樣本中看到它正在進行容器類操作,並且我可以確切地看到在哪裏。 如果我可以用其他能達到相同目的的容器類操作來替換,我可以節省時間。 多少時間?直到我看到這些操作發生的時間大概是這個時間的一小部分,而且可能會非常大。

這樣做的真正收益是可以有多個問題。 假設問題A的成本爲40%,B成本爲20%,C成本爲10%, ,總時間爲10秒。 你去過A,最明顯的一個。修復它可以將時間縮短到6秒左右。 (加速10/6 = 1.67)。 然後問題B佔用較大的時間百分比(2/6 = 0.33),所以用樣本更容易找到。 修復它減少時間到4秒(加速6/4 = 1.5) 然後C是(1/4 = 25%)並且比以前更容易找到。 刪除它可將時間縮短到3秒(加速4/3 = 1.33)。 總加速因子是10/3 = 3.33。 您可以將它看作每個加速比的複合產品:10/6 * 6/4 * 4/3 = 10/3。

現在我在這裏處理數字,但這些都不是測量本地代碼片段所花的時間。 他們只是從描述該計劃正在做什麼的少量詳細樣本中發生的事情得出的粗略估計。 樣品並不真正關心測量。 他們關注暴露的問題。