【发布时间】:2012-02-21 16:35:45
【问题描述】:
我知道 GC 会释放不再引用的对象的内存,但是有没有一种有效的方法来检查我是否确实引用了不再使用的对象?
关于如何避免留下对不再使用的对象的引用的提示将非常有用。
在这种情况下使用 Windows 任务管理器有帮助吗?如果是这样,关于如何使用它来批评我的程序的提示也会有所帮助。
谢谢。
【问题讨论】:
标签: java memory-management memory-leaks garbage-collection
我知道 GC 会释放不再引用的对象的内存,但是有没有一种有效的方法来检查我是否确实引用了不再使用的对象?
关于如何避免留下对不再使用的对象的引用的提示将非常有用。
在这种情况下使用 Windows 任务管理器有帮助吗?如果是这样,关于如何使用它来批评我的程序的提示也会有所帮助。
谢谢。
【问题讨论】:
标签: java memory-management memory-leaks garbage-collection
检查很简单。您仍在使用您引用的所有对象。
“内存泄漏”的一个常见问题是将对象添加到集合中,并且在不再需要它们时忘记清理它们。解决此问题的一种方法是使用 WeakReferences 或使用这些的集合,例如弱哈希映射。当其他地方不再有引用时,这些将被清理。
恕我直言,Windows 任务管理器在这里比帮助更容易混淆。 ;)
使用 VIsualVM 或像 YourKit 这样的商业内存分析器是检查内存消耗的最佳方法。
【讨论】:
您可能会发现文章What is a “Memory leak” in Java? 很有用(我不知道这里宣传的工具)。
我不知道如何找到引用但未使用的对象 - 但有时可以被垃圾收集的对象也会对您的程序产生影响 - 如果您创建大量对象并经常引发 GC。
要跟踪 GC 活动,您可以简单地使用 java non standard option -Xloggc:<file>。这会将 GC 活动记录到给定文件中。您将获得您的应用程序在垃圾收集方面有多忙的第一印象。
虽然我没有回答你的问题,但我希望这对你有用。
【讨论】: