如何从Java堆转储

时间:2016-03-14 15:53:25

标签: java hashmap jvisualvm 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中表数组的对象ID。即使这样也不行,因为它只能找到直接附着在表上的对象,而不是链接对象。在任何情况下,我觉得我正在努力实现这一点 - 我认为有一种简单的方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

显然还有一个Eclipse工具(独立和插件):Memory Analyzer(MAT),可能提供更多的导出选项。见http://www.eclipse.org/mat