首页 > 解决方案 > JAVA:从 Heapdump 读取 HashMap 对象内容

问题描述

我需要更深入地分析 OOM,并且需要找出哪些对象导致 Oracle 的 T4CPreparedStatement JDBC 层内部的 OOM。因此,我正在寻找 HashMap (java.util.Hashtable$Entry[]) 中的内容。

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

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

标签: javaout-of-memoryheap-memoryjmx

解决方案


PHD 文件没有原始字段值或原始数组内容,因此您最多只能在 HashMap 中看到键和值的类型。

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

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

    班级名称 | 对象 | 浅堆
    -------------------------------------------------- ----------------
    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
    | | '- 总计:5 个条目 | |             
    -------------------------------------------------- ----------------

真的你需要一个系统转储。


推荐阅读