2015-11-01 69 views
2

我有一些內存泄漏的代碼。我發現內存分析工具(MAT)據說這是Java的最佳之一。它看起來很花哨,並給出了很多關於問題的細節,以及關於它們的大量信息。但是,它並沒有說要說的第一件事,或者我找不到。如何在Java內存分析工具中找到內存泄漏行

讓說我的代碼如下:

class LeakyClass{ 
    //do some stuff in thousands of lines 
    void leaky_method(){ 
     char[] chars = //some how cause memory leak --> line 12434 
    } 
    //do more stuff in thousands of lines 
} 

考慮,有30-40多類這樣的,它是不是我寫的。

的問題是MAT告訴我有char[]問題,但它並沒有說明什麼line 12434或者我無法找到。有沒有辦法找到that line或至少classmethod的名字?如果只有一條線,我會尋找線路,但泄漏可能無處不在?

下面是內存泄漏的圖像: mem-leak

順便說一句,我讀了幾個教程,但找不到任何關於它。 在此先感謝,

回答

1

如果您只有HPROF堆轉儲,則此信息不可用。您需要一個分析代理,爲每個分配記錄分配堆棧跟蹤。

例如,JProfiler具有此功能。在會話啓動對話框中激活分配記錄,然後進行堆轉儲。

在堆步行者的「類」視圖中,選擇「char []」並創建一個新的對象集。然後進入堆步行器的「分配」選項卡,並檢查所有這些分配的累積堆棧跟蹤。

enter image description here

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