是否有人使用Eclipse内存管理器来检测Java代码中的内存泄漏?有人可以推荐一个不错的地方来查找有关使用内存管理器的信息吗?我在网上阅读了一些东西,这表明我需要让程序运行直到崩溃(发生内存不足错误),这将生成崩溃报告。然后使用内存管理器打开此报告以检查可能发生内存泄漏的位置。这是每个人使用内存管理器的方式吗?

最佳答案

尽管-XX:+HeapDumpOnOutOfMemoryError可能有用,但是我当前使用Eclipse Memory Manager的工作流程是:

  • 正常运行程序
  • 等待内存失控。
  • 运行jmap:jmap -dump:format=b,file=dump.hprof <PID>
  • 在EMM中打开hprof文件。

  • 我通常开始使用直方图和支配树视图,以查看是否有任何异常,然后从那里进行深入研究。

    当使用堆转储时,VisualVM可能很有用,但效率似乎比EMM低得多(EMM在加载堆转储时会缓存很多信息)。 Netbeans Profiler非常适合获取分配位置和时间分析。

    09-11 18:54
    查看更多