我有一个使用 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。即使这也不太有效,因为它只能找到直接附加到表的对象,而不是链接的对象。无论如何,我觉得我让这件事变得比它必须的更难 - 我以为有一个简单的方法可以做到这一点。
最佳答案
扩展 geert3 答案:
您可以使用Memory Analyzer来做到这一点。 选择“dominator_tree”并搜索您的 HashMap。
选择 -> 右键单击 -> Java 集合 -> 哈希条目
关于java - 如何从 Java 堆转储中提取 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35992182/