【问题标题】:What is the difference between Java Memory Analysis Tools and Memory Leak Detection Tools?Java内存分析工具和内存泄漏检测工具有什么区别?
【发布时间】:2011-01-07 16:59:54
【问题描述】:

Java 内存分析工具(Yourkit Java Profiler 之类的分析器)和 Java 内存泄漏检测工具之间有什么区别吗? (根据我的搜索,很难注意到所涉及的工具的差异,但在我看来,这听起来像是方法方式上的差异)。 如果有,是否有任何免费(可供下载)用于内存泄漏检测(不是内存分析)的工具?提前谢谢!

【问题讨论】:

    标签: java memory-leaks


    【解决方案1】:

    严格来说,Java 中不存在 C/C++ 意义上的内存泄漏:不再引用它的内存分配。

    因此,当在 java 上下文中使用术语“泄漏”时,有时它只是意味着大内存结构。一些工具称它们为“泄漏嫌疑人”,因为它们无法判断内存结构是否由于问题的性质或错误而变大。

    有时“泄漏”是在动态意义上使用的:一种随着时间增长的内存结构。

    因此,首先,您需要一个内存工具,它可以量化地概述 Java 堆转储快照中的内存分布和引用结构。有了它,您可以通过比较两个或多个快照来调查动态行为。

    如果这些工具提供了额外的“泄漏功能”(JProbe 的 Memory-Leak-Doctor,Eclipse-MATs Memory-Leak Report),则表明它们首先无法提供关于内存结构的真正全面的视图。

    如果您正在寻找免费下载,请查看

    http://eclipse.org/mat/

    在

    http://dr-brenschede.de/bheapsampler/

    【讨论】:

      【解决方案2】:

      将内存泄漏检测工具视为内存分析工具的优化版本,它可以帮助您发现问题,而无需自己搜索数据。

      我用过Yourkit。我认为它具有这两个功能。虽然它没有明确指出“老兄,你的泄漏在这行代码上”,但它提供了用于比较内存快照以显示随时间变化的实用程序,并提供了各种实用程序来追踪对象的引用以找出它们的原因还在记忆中。

      根据您对泄漏检测工具的定义,有人可能会认为 JConsole 中显示堆内存使用情况的图表是一种泄漏检测工具。查看在足够长的使用时间内堆消耗的图表......如果平均值持续上升,那么您很可能有泄漏。

      我与 Yourkit 人员无关,但我可以推荐该工具。它可能会更好,但也不坏。我将它用于内存和 CPU 性能分析。我对我们的产品进行定期负载和内存测试(JConsole/JMX 和其他方法),并在出现异常时使用 Yourkit。大约每 2-4 个月一次,我进行一次 CPU 分析,以寻找易于修复的性能瓶颈(我们的负载测试发现了主要问题)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-15
        • 1970-01-01
        • 2011-09-17
        • 2010-11-06
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2011-10-29
        相关资源
        最近更新 更多