6

就在今天,我發現我的應用程序中有大量的對象創建爲匿名類的內存泄漏。這是一個典型的例子,每個對象都有自己的類定義並放入堆中。如何在java中找到匿名類的GC根?

在運行時內存分析器中發現並不是微不足道的,Eclipse Memory Analyzer完成的堆轉儲分析也沒有幫助。

我想知道如何記錄在線程ID(或至少父類加載器)運行時創建的所有匿名類。

我認爲單單這件事就會使找到根本原因變得微不足道。

回答

1

我不確定列出所有的匿名類將讓你在哪裏,通常有很多。

您可能需要的是搜索由內部類引用(包括匿名類)保留的類的實例的邏輯。

JProfiler,有一個相應的檢驗:

enter image description here

設置由檢查創建該對象包含所有這樣的實例中,然後可以顯示一個路徑爲GC根:

enter image description here

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