2013-01-15 97 views
5

我試圖在應用程序中調試permgen錯誤。我正在運行VisualVM來分析應用程序並採取了內存快照的堆轉儲。VisualVM - 查找所有對類的引用

將快照加載到VisualVM中進行分析,目前我可以在類列表中看到幾個出現多次的類,全部列出了0個實例,0個大小 - 我只希望每個類都有一個(可能鏈接到它的類加載器) - 有沒有什麼方法可以確定什麼仍然保持對沒有實例的這些類的引用?如果我只需加載轉儲文件(.hprof)來分析引用的內容,就很樂意使用其他工具。

謝謝!

+0

我在過去曾使用過YourKit。它可以加載轉儲。您可以獲得免費的eval許可證。 –

回答

3

我使用MAT這樣的東西。作品很棒,即使是在大堆裏。

+0

謝謝 - 剛剛偶然發現了MAT的另一個建議 - 已經安裝在Eclipse中,因此將加載日誌以查看我能找到的內容。 – rhinds

16

那麼,說「使用MAT」並沒有真正回答這個問題!

要在VisualVM中執行此操作,在「採樣器」或「分析器」視圖中,有一個標記爲「Heap Dump」的按鈕(右上角)。點擊此按鈕打開堆分析器。在「類」選項卡下,顯示所有加載的類。在底部有一個搜索框,鍵入你感興趣的類名,在過濾的視圖中雙擊相關的類。

這將打開實例視圖。右鍵單擊左側窗格中的實例,然後選擇「顯示最近的GC根目錄」以查找引用該對象的內容。

Barney

相關問題