在jvm堆转储中查找键值对的内容?

时间:2013-10-18 20:18:22

标签: java heap-dump

我正在使用内存分析器工具分析堆转储。从支配树中我选择了具有最高保留内存的类(大约47%)。没有参考的选定对象,我看到有一个超过1GB的保留内存的哈希映射条目。我看到像这样的键和值对

Class Name                                              | Shallow Heap | Retained Heap
---------------------------------------------------------------------------------------
key java.lang.String @ 0x717278cd8  MapAllProfilesOutput|           32 |            88
---------------------------------------------------------------------------------------

Class Name                                                   | Shallow Heap | Retained Heap
------------------------------------------------------------------------------------------------
value com.tibco.xml.xdata.xpath.Variable @                   |           24 | 1,194,483,312
|- <class> class com.tibco.xml.xdata.xpath.Variable          |           16 |         2,296
|- mValue com.tibco.xml.datamodel.nodes.Document             |           48 | 1,194,483,288
------------------------------------------------------------------------------------------------

有没有办法可以获得价值的内容?我正在阅读一些关于使用OQL进行散列的内容,所以想检查一下这种可能性。我的堆转储大约是4.5 GB。

1 个答案:

答案 0 :(得分:0)

我建议您使用Eclipse Memory Analyzer。这为您提供了一个图形概览,您可以在其中轻松深入查看相关地图。也就是说,如果它的大小真的是1.2GB ......那就是大量钻探!

如果你真的想使用OQL,那么online help是一个很好的资源。使用OQL,如果您选择的值返回一个字符串,它将被打印,例如:

select file.path.toString() from java.io.File file

将打印转储中所有File对象的路径。您可以使用它来打印文档的重要细节,这将有助于缩小您正在处理的文档。