【问题标题】:Java GC and Memory usage trackingJava GC 和内存使用跟踪
【发布时间】:2012-02-21 16:35:45
【问题描述】:

我知道 GC 会释放不再引用的对象的内存,但是有没有一种有效的方法来检查我是否确实引用了不再使用的对象?

关于如何避免留下对不再使用的对象的引用的提示将非常有用。

在这种情况下使用 Windows 任务管理器有帮助吗?如果是这样,关于如何使用它来批评我的程序的提示也会有所帮助。

谢谢。

【问题讨论】:

    标签: java memory-management memory-leaks garbage-collection


    【解决方案1】:

    检查很简单。您仍在使用您引用的所有对象。

    “内存泄漏”的一个常见问题是将对象添加到集合中,并且在不再需要它们时忘记清理它们。解决此问题的一种方法是使用 Wea​​kReferences 或使用这些的集合,例如弱哈希映射。当其他地方不再有引用时,这些将被清理。

    恕我直言,Windows 任务管理器在这里比帮助更容易混淆。 ;)

    使用 VIsualVM 或像 YourKit 这样的商业内存分析器是检查内存消耗的最佳方法。

    【讨论】:

      【解决方案2】:

      “不再使用”的对象被垃圾回收。 “使用”意味着持有一个强有力的参考。问题在于您不打算使用的对象,但仍然被错误地强烈引用。

      只有像 VisualVM 或 JProfiler 这样的 Java 分析器可以帮助您找到这些对象。

      显示如何使用JProfiler 查找内存泄漏的屏幕截图here 可用。

      免责声明:我公司开发 JProfiler。

      【讨论】:

        【解决方案3】:

        您可能会发现文章What is a “Memory leak” in Java? 很有用(我不知道这里宣传的工具)。

        我不知道如何找到引用但未使用的对象 - 但有时可以被垃圾收集的对象也会对您的程序产生影响 - 如果您创建大量对象并经常引发 GC。

        要跟踪 GC 活动,您可以简单地使用 java non standard option -Xloggc:<file>。这会将 GC 活动记录到给定文件中。您将获得您的应用程序在垃圾收集方面有多忙的第一印象。

        虽然我没有回答你的问题,但我希望这对你有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多