2012-02-21 80 views
1

我知道GC释放了不再引用的对象的内存,但有没有一种有效的方法来检查我是否引用了不再使用的对象?Java GC和内存使用情况跟踪

有关如何避免引用不再使用的对象的提示将大大增加。

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

谢谢。

回答

3

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

与“内存泄漏”的对象添加到集合,并忘记清除它们时,他们不再需要一个共同的问题。解决这个问题的方法是使用WeakReferences或使用这些的集合。 WeakHashMap中。当其他地方不再提供参考时,这些内容会被清理干净。

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

使用VisualVM的或像YourKit商业内存分析器是检查你的内存消耗的最佳方式。

1

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

只有Java的剖析一样的VisualVM或JProfiler的可以帮你找到这些对象。

屏幕演员,其中将展示如何找到内存泄漏与JProfiler可用here

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

1

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

我不知道如何找到引用但没有使用的对象 - 但有时也收集的对象会对你的程序的影响,可以是垃圾 - 如果你创建它们的质量和挑衅经常GC。

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

我希望这是一个有用的信息给你,虽然我没有回答你的问题。