簡體   English   中英

如何從 Java 堆轉儲中提取 HashMap

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM