2011-01-07 38 views
0

在運行的進程上每隔30分鐘左右使用jmap -histo命令,我發現了一種明顯是內存泄漏的對象(在桌面應用程序中)。我發現什麼樣的對象導致內存泄漏,現在是什麼?

的負責泄漏(即唯一種類的對象的實例,其數量隨時間增長,並且由一個巨大的量)目的是INT []

我懷疑BufferedImage是罪魁禍首,但我不確定(我非常在意沖洗/無效BufferedImage s但我仍然認爲這是泄漏的地方)。

但是我也在程序的另一部分使用了int [],我根本不確定泄漏是從哪裏來的。 jmap -histo的輸出有點太「瘦」了,我不喜歡。

我該如何查明int[]的泄漏位置在哪裏發生。

順便說一下,我想指出一個簡單的jmap -histo可以有多麼偉大:我確定對於很多對象,只需查看所使用的實例和內存的數量就足以發現泄漏,而不需要更深入的分析。

但在我的情況下,我需要別的東西。

我的問題不是什麼樣的工具可以發現泄漏。我的問題是:

知道我的應用程序(或我的應用程序使用API​​)正在泄漏INT [],我可以採取什麼措施(用你喜歡的分析器,例如)來,希望找到泄漏?

該工具必須在Java 1.5 OS X 10.4 Apple JVM上工作。

回答

1

您需要按保留堆對對象進行排序。你會很快找到包含所有int []的含義對象/類。

+0

哪些工具可以按*保留堆*? – NoozNooz42 2011-01-07 21:46:29

1

我會建議先使用Eclipse MAT,因爲我個人不知道jProfiler的功能。然後,當你加載你的堆轉儲時,你可以檢查一些int []的傳入引用。您可以精簡創建數組的引腳,並查看哪個持有類實際上創建了大量數據。

相關問題