2012-05-25 52 views

回答

3

我敢肯定你不能做到這一點與對正在運行的進程的VisualVM。你需要做的是使用jmap(例如jmap -dump:format = b,file = heapdump.bin)進行堆轉儲,然後使用像mat這樣的工具來分析該轉儲。

請注意,堆轉儲會阻塞您的進程相當長的時間,特別是如果您有一個大堆。

你也可以通過一個更一般的級別來獲得信息,就是運行jmap -histo:根據你的進程生活,看看每種類型的對象的數量和他們的腳印。

+0

jmap非常棒,感謝您的提示。我只是用它來得到一個大小爲17GB的堆的活動對象列表,大約需要3秒。爲了我的目的,爲每個類獲取大量實例足以識別內存膨脹。 – derwiwie

2

VisualVM絕對支持通過Heap Dump查看和檢查活動對象,以及實時採樣分配。

對於堆轉儲,右鍵單擊該進程,選擇Heap Dump。

這將打開Heap Dump視圖。在「摘要」頁面上,您可以按保留大小計算n個最大的對象,然後點擊各個視圖。

它提供的功能基本上與上面提出的使用jmap和mat的功能相同,但具有更好的工作流程和可用性。