我有一个使用jmap生成的Java堆转储文件。其中包含一个HashMap,我需要将其提取为文本格式(CSV也可以)。HashMap相当大,因此我需要一个脚本解决方案。
使用JVisualVM,我可以找到HashMap。然而,似乎没有导出其数据的方法。经过一些实验,我想出了这个OQL查询:
使用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。但这并不完全有效,因为它只能找到直接附加到表的对象,而不能找到链式对象。无论如何,我感觉自己把这件事想得太难了 - 我认为应该有一种简单的方法来解决这个问题。