瀏覽Heap Dump
可以使用VisualVM瀏覽heap dump文件的內容,從而快速查看在堆中分配的對象。Heap dumps在主窗口的heap dump子標簽頁中顯示。你可以打開保存在本地的heap dump文件(.hprof)或者使用VisualVM捕獲正在運行的程序的heap dumps。
一個heap dump是Java虛擬機(JVM)在某一時刻所有對象的快照。JVM從堆中為所有的類實例和數組分配內存。當一個對象不再被使用並且沒有對它的引用時,垃圾回收器回收其堆內存。通過查看堆,你可以找到對象創建的位置,發現對象的引用。如果JVM試圖從堆中移除不再需要的對象時失敗了,VisualVM可以定位到離該對象最近的垃圾回收根(garbage collecting root)。
打開Heap Dump文件
如果你有一個保存在本地的heap dump文件,在VisualVM中通過File > Load菜單項加載該文件。VisualVM能打開.hprof格式的heap dumps文件。打開后,heap dump作為主窗口的一個子標簽頁。
捕獲Heap Dump
可以使用VisualVM捕獲一個本地運行的應用程序的heap dump。捕獲的heap dump文件是一個臨時文件,關閉VisualVM后自動刪除,若要保留,需要將其另存為文件。
可通過以下兩種方法捕獲heap dump:
- 在左側“Application”(應用程序)子窗口中右擊相應的應用程序,選擇Heap Dump(堆Dump)。
- 在Monitor(監視)子標簽頁中點擊Heap Dump(堆Dump)按鈕。
本地應用程序的Heap dumps作為應用程序標簽頁的一個子標簽頁打開。同時,heap dump在左側的Application(應用程序)欄中對應一個含有時間戳的節點。右擊這個節點選擇save as(另存為)即可將heap dump保存到本地。
瀏覽Heap Dump
VisualVM提供了一下可視化視圖來瀏覽heap dumps:
Summary View(概述)
打開一個heap dump時,VisualVM默認顯示“概述”標簽頁。概述視圖顯示了該heap dump的捕獲環境和其他系統屬性。
Classes View(類)
類視圖顯示了類列表和其對應的實例數量、所占比例。右擊類名選擇“Show in Instances View(在實例視圖中顯示)”即可查看指定類的實例列表。
點擊列頭可按指定列排序。可以使用類列表下方的“類名過濾器(Class Name Filter)”來過濾類,也可以通過右擊一個類名選擇“Show Only Subclasses(只顯示子類)”來將顯示結果限制為指定類的子類。
Instances View(實例數)
實例數視圖顯示了選中類的對象實例。在“實例(Instance)”欄中選中一個實例,右側的“字段(Fields)”和“引用(References)”欄將顯示該實例對應的字段和對它的引用。在引用欄中,右擊一條並選擇“顯示最近的垃圾回收根節點(Show Nearest GC Root)”就會顯示最近的垃圾回收根節點。