![](/img/trans.png)
[英]How to extract java class definitions from a heap dump of a running application?
[英]How to extract a HashMap from a Java heap dump
我有一個使用 jmap 生成的 Java 堆轉儲。 這包含一個 HashMap,我需要將其提取為文本格式(CSV 就可以)。 HashMap 相當大,所以我需要一個腳本解決方案。
使用 JVisualVM 我可以找到 HashMap。但是,似乎沒有辦法導出它的數據。 經過一些實驗后,我確實計算出了這個 OQL 查詢:
select map(filter(heap.findObject("0x12345678"), 'it != null'), function(it) { return {"id": it.key.value, "value": it.value.value}; })
其中 0x12345678 是 HashMap 中表數組的 object ID。即使這樣也不太有效,因為它只能找到直接附加到表的對象,而不是鏈接的對象。 無論如何,我覺得我讓這件事變得比它必須的更難——我本以為有一種簡單的方法可以做到這一點。
擴展 geert3 答案:
您可以使用Memory Analyzer來完成。 Select“dominator_tree”並搜索您的 HashMap。
Select -> 右鍵單擊 -> Java Collections -> Hash 條目
顯然還有一個Eclipse工具(獨立和插件):Memory Analyzer(MAT),可能提供更多的導出選項。 見http://www.eclipse.org/mat
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.