【问题标题】:Java heapdump analysis find source for the instantiated objectsJava heapdump 分析查找实例化对象的源
【发布时间】:2012-07-16 04:40:33
【问题描述】:

我正在使用 jvisualvm 分析堆转储。从报告中我可以看到类、实例数和占用的大小。

我想知道的是 - 这些对象的来源(哪个类实例化)。对于给定的对象,如果我能知道所有源类以及每个类创建的实例数,我想就很容易识别出不好的候选对象。

这可能吗?如果是这样,有没有比其他工具更好的工具来提供此类信息?

【问题讨论】:

    标签: java out-of-memory heap-memory jvisualvm jhat


    【解决方案1】:

    YourKit 按大小和数量提供分配跟踪。您可以搜索创建的特定类并找到热点。评估版是免费的。 ;)

    【讨论】:

    • @VenKatari 您可能会发现其他商业分析器对您也一样或更好。我还没有全部尝试过。
    【解决方案2】:

    试试:

    http://dr-brenschede.de/bheapsampler 以获得易于理解的摘要或 http://www.eclipse.org/mat进行更详细的分析

    这些工具完全符合您的要求

    【讨论】:

      【解决方案3】:

      你试过了吗

      jhat <yourdump>
      

      假设您的创作是以下形式:

      私有的 Blah blah = new Blah();

      对于每个实例,您都可以看到谁拥有对它的引用。它还提供了强大的查询语言 [OQL]。 请参阅示例: jhat OQL AND in where clause

      但是,如果您在其他地方创建它并简单地将其传递给另一个类字段,您将无法从内存转储中找到它[使用任何工具],因为它只是一个快照。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 2014-11-19
        • 1970-01-01
        • 2014-04-28
        • 2016-10-28
        • 2012-07-16
        • 2016-11-23
        相关资源
        最近更新 更多