JAVA:从Heapdump中读取HashMap对象的内容

问题描述

我需要更深入地分析OOM,并且需要找出哪些对象导致oracle的T4CPreparedStatement JDBC层内部的OOM。因此,因此我正在寻找HashMap内部的内容(java.util.Hashtable $ Entry [])。
  • HeapDump是否有可能?
  • 可以通过JMX连接吗?

我的HeapDump(*。phd文件)是由Websphere Application Server在OOM期间自动创建的。

PS:可能可以在带有IBM Extensions的Eclipse Memory Analyzer Tool中完成,但是如何?

解决方法

PHD文件没有原始字段值或原始数组内容,因此充其量您可以在HashMap中看到键和值的类型。

哈希映射集合查询将失败,并显示:“转储格式'DTFJ-PHD'不支持检查'哈希条目'。”

“按类显示对象”可能有助于查看持有的东西种类:

    Class Name                               | Objects | Shallow Heap
    ------------------------------------------------------------------
    java.util.HashMap                        |       1 |           40
    |- java.lang.Class                       |       1 |          160
    |- java.util.HashMap$Node[]              |       1 |          136
    |  |- java.util.HashMap$Node             |      10 |          240
    |  |  |- sun.misc.URLClassPath$JarLoader |       9 |          504
    |  |  |- java.lang.Class                 |       1 |          160
    |  |  |- java.lang.String                |      10 |          160
    |  |  |- java.util.HashMap$Node          |       4 |           96
    |  |  |- sun.misc.URLClassPath$FileLoader|       1 |           24
    |  |  '- Total: 5 entries                |         |             
    ------------------------------------------------------------------

确实需要系统转储。