2010-01-21 44 views
1

Java內存分析工具(類似於Yourkit Java Profiler的分析器)和Java內存泄漏檢測工具之間是否有區別? (從我的搜索中,差別很難注意到哪些工具是關心的,但在我看來,這種方式似乎有所不同)。 如果有,是否有任何免費(可供下載)工具用於內存泄漏檢測(而不是內存分析)?先謝謝你!Java內存分析工具和內存泄漏檢測工具有什麼區別?

回答

1

將內存泄漏檢測工具視爲內存分析工具的優化版本,可幫助您查找問題,而無需親自查看數據。

我已經使用了Yourkit。我會認爲它有兩個功能。雖然它沒有明確指出「你是夥計,你的泄漏是在這行代碼中」,它提供了用於比較內存快照的實用程序,以顯示隨時間變化的內容,並提供了各種實用程序來追蹤對象的引用以找出它們的原因仍在記憶中。

根據您對泄漏檢測工具的定義,可能會爭辯說JConsole中顯示堆內存使用情況的圖是泄漏檢測工具。查看一段足夠長的使用時間的堆耗量圖表......如果平均值持續上升,很可能出現泄漏。

我與Yourkit人沒有關係,但我可以推薦這個工具。這可能會更好,但這並不壞。我將它用於內存和CPU性能分析。我對我們的產品進行常規的加載和內存測試(JConsole/JMX和其他方法),並在出現奇怪時使用Yourkit。大約每2-4個月進行一次cpu分析,尋找容易修復性能瓶頸的方法(我們的負載測試會發現主要問題)。

3

嚴格地說,在C/C++的意義上,Java中沒有內存泄漏:內存分配沒有更多的引用它。

因此,當在java上下文中使用術語「泄漏」時,它有時意味着一個大的內存結構。一些工具稱他們爲「泄漏嫌疑人」,因爲他們無法判斷由於問題的性質或錯誤導致的內存結構是否很大。

有時在動態意義上使用「泄漏」:隨時間增長的內存結構。

所以首先,您需要一個內存工具,它可以爲您提供Java堆轉儲快照中內存分配和引用結構的定量概述。有了這些,您可以通過比較兩個或更多快照來調查動態行爲。如果這些工具提供了一個附加的「泄漏特徵」(JProbe的記憶 - 泄漏 - 醫生,Eclipse-MATs內存泄漏報告),則表明它們首先存在對內存結構非常全面的觀點的問題。

如果你正在尋找一個免費下載,看看

http://eclipse.org/mat/

,並在

http://dr-brenschede.de/bheapsampler/