2012-02-21 81 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活動記錄到給定文件。你會得到第一印象,你的應用程序有多垃圾收集。

我希望這是一個有用的信息給你,雖然我沒有回答你的問題。