2012-08-30 81 views
0

有沒有辦法,看看哪些對象在堆中的OldGen一部分而存在?我知道如何查看堆中的所有對象(jmap),但我只想看到PSOldGen中的對象。Java - 哪些對象存在於PSOldGen中?

有沒有辦法做到這一點?

編輯:說明我的問題&需要

我的應用程序需要非常大的堆(它是用來生產與-XmX30G)。 我們每〜20分鐘後,該應用程序掛起〜由於完整垃圾回收20秒問題。我想看看有什麼東西能夠存活下來,足夠的時間移動到老根,然後才能收集垃圾。 我應該採取哪種方法?

感謝

回答

0

,你必須使用好的分析工具像JProfilerJprobe有更深入的瞭解您的堆。你可以檢查沒有被垃圾收集並佔據堆的物體。慢慢收集不到的物體不斷移動到老舊的空間。你不能檢查物體的年齡,並且可以識別具有較高年齡的物體將會在舊有空間中。

+0

我怎麼看到這個JProfiler的?我如何看待對象年齡?哪個對象移動到老根? – duduamar

+0

您必須閱讀供應商特定指南才能看到它,但是其中大部分都帶有可提供所有這些信息的流暢UI。 – ajay

0

您有什麼問題?有更大的堆大小或更長的GC暫停?

如果它是關於高堆的大小,你可以只是JMAP一個完整的GC檢查後堆的對象和檢查,如果你需要他們。如果還有額外的對象,您仍然可以參考,您可以相應地更改代碼。

如果你的問題是由於較長的GC暫停,你可以採取JMAP輸出之前和一個完整的GC之後,看到那些應該給被垃圾回收在該週期什麼對象的詳細信息輸出的差異。您可以追蹤這些對象創建的起源並避免這種情況,可能會通過對象池等等。

相關問題